@oml/cli 0.13.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 (77) hide show
  1. package/README.md +28 -21
  2. package/out/{auth.d.ts → auth/auth.d.ts} +7 -0
  3. package/out/{auth.js → auth/auth.js} +42 -3
  4. package/out/auth/auth.js.map +1 -0
  5. package/out/{platform-constants.js → auth/constants.js} +1 -1
  6. package/out/auth/constants.js.map +1 -0
  7. package/out/{platform.d.ts → auth/platform.d.ts} +5 -7
  8. package/out/{platform.js → auth/platform.js} +13 -19
  9. package/out/auth/platform.js.map +1 -0
  10. package/out/cli.d.ts +6 -0
  11. package/out/cli.js +175 -62
  12. package/out/cli.js.map +1 -1
  13. package/out/commands/export.d.ts +8 -0
  14. package/out/commands/export.js +27 -0
  15. package/out/commands/export.js.map +1 -0
  16. package/out/commands/lint.d.ts +22 -2
  17. package/out/commands/lint.js +64 -18
  18. package/out/commands/lint.js.map +1 -1
  19. package/out/commands/reason.d.ts +2 -9
  20. package/out/commands/reason.js +52 -48
  21. package/out/commands/reason.js.map +1 -1
  22. package/out/commands/render.d.ts +1 -9
  23. package/out/commands/render.js +15 -726
  24. package/out/commands/render.js.map +1 -1
  25. package/out/commands/server/actions.d.ts +22 -0
  26. package/out/commands/server/actions.js +394 -0
  27. package/out/commands/server/actions.js.map +1 -0
  28. package/out/commands/server/require.d.ts +1 -0
  29. package/out/commands/server/require.js +89 -0
  30. package/out/commands/server/require.js.map +1 -0
  31. package/out/commands/server/rest.d.ts +2 -0
  32. package/out/commands/server/rest.js +117 -0
  33. package/out/commands/server/rest.js.map +1 -0
  34. package/out/commands/validate.d.ts +3 -3
  35. package/out/commands/validate.js +35 -171
  36. package/out/commands/validate.js.map +1 -1
  37. package/package.json +5 -7
  38. package/src/{auth.ts → auth/auth.ts} +54 -3
  39. package/src/{platform.ts → auth/platform.ts} +13 -19
  40. package/src/cli.ts +207 -63
  41. package/src/commands/export.ts +54 -0
  42. package/src/commands/lint.ts +88 -18
  43. package/src/commands/reason.ts +69 -56
  44. package/src/commands/render.ts +23 -995
  45. package/src/commands/server/actions.ts +480 -0
  46. package/src/commands/server/require.ts +99 -0
  47. package/src/commands/server/rest.ts +135 -0
  48. package/src/commands/validate.ts +46 -207
  49. package/out/auth.js.map +0 -1
  50. package/out/backend/backend-types.d.ts +0 -21
  51. package/out/backend/backend-types.js +0 -3
  52. package/out/backend/backend-types.js.map +0 -1
  53. package/out/backend/create-backend.d.ts +0 -2
  54. package/out/backend/create-backend.js +0 -6
  55. package/out/backend/create-backend.js.map +0 -1
  56. package/out/backend/direct-backend.d.ts +0 -20
  57. package/out/backend/direct-backend.js +0 -150
  58. package/out/backend/direct-backend.js.map +0 -1
  59. package/out/backend/reasoned-output.d.ts +0 -38
  60. package/out/backend/reasoned-output.js +0 -568
  61. package/out/backend/reasoned-output.js.map +0 -1
  62. package/out/commands/closure.d.ts +0 -33
  63. package/out/commands/closure.js +0 -537
  64. package/out/commands/closure.js.map +0 -1
  65. package/out/commands/compile.d.ts +0 -11
  66. package/out/commands/compile.js +0 -63
  67. package/out/commands/compile.js.map +0 -1
  68. package/out/platform-constants.js.map +0 -1
  69. package/out/platform.js.map +0 -1
  70. package/src/backend/backend-types.ts +0 -27
  71. package/src/backend/create-backend.ts +0 -8
  72. package/src/backend/direct-backend.ts +0 -169
  73. package/src/backend/reasoned-output.ts +0 -697
  74. package/src/commands/closure.ts +0 -624
  75. package/src/commands/compile.ts +0 -88
  76. /package/out/{platform-constants.d.ts → auth/constants.d.ts} +0 -0
  77. /package/src/{platform-constants.ts → auth/constants.ts} +0 -0
@@ -0,0 +1,135 @@
1
+ // Copyright (c) 2026 Modelware. All rights reserved.
2
+
3
+ import * as fs from 'node:fs/promises';
4
+ import * as os from 'node:os';
5
+ import * as path from 'node:path';
6
+ import { createHash } from 'node:crypto';
7
+
8
+ const DEFAULT_HOST = '127.0.0.1';
9
+
10
+ type ServerState = {
11
+ pid: number;
12
+ port: number;
13
+ };
14
+
15
+ type Envelope<T> = {
16
+ ok?: boolean;
17
+ result?: T;
18
+ error?: string;
19
+ };
20
+
21
+ function workspaceHash(workspaceRoot: string): string {
22
+ return createHash('sha256').update(path.resolve(workspaceRoot)).digest('hex');
23
+ }
24
+
25
+ function serverLockFileForWorkspace(workspaceRoot: string): string {
26
+ return path.join(os.homedir(), '.oml', 'workspaces', workspaceHash(workspaceRoot), 'server.lock');
27
+ }
28
+
29
+ function isProcessAlive(pid: number): boolean {
30
+ try {
31
+ process.kill(pid, 0);
32
+ return true;
33
+ } catch {
34
+ return false;
35
+ }
36
+ }
37
+
38
+ function parseServerState(raw: string): ServerState | undefined {
39
+ try {
40
+ const parsed = JSON.parse(raw) as { pid?: unknown; port?: unknown };
41
+ const pid = Number(parsed.pid);
42
+ const port = Number(parsed.port);
43
+ if (!Number.isFinite(pid) || !Number.isFinite(port)) {
44
+ return undefined;
45
+ }
46
+ const pidInt = Math.trunc(pid);
47
+ const portInt = Math.trunc(port);
48
+ if (pidInt <= 0 || portInt <= 0 || portInt > 65535) {
49
+ return undefined;
50
+ }
51
+ return { pid: pidInt, port: portInt };
52
+ } catch {
53
+ return undefined;
54
+ }
55
+ }
56
+
57
+ async function readRunningState(workspaceRoot = process.cwd()): Promise<ServerState | undefined> {
58
+ const lockFile = serverLockFileForWorkspace(path.resolve(workspaceRoot));
59
+ try {
60
+ const raw = (await fs.readFile(lockFile, 'utf-8')).trim();
61
+ if (!raw) {
62
+ return undefined;
63
+ }
64
+ const state = parseServerState(raw);
65
+ if (!state || !isProcessAlive(state.pid)) {
66
+ return undefined;
67
+ }
68
+ return state;
69
+ } catch {
70
+ return undefined;
71
+ }
72
+ }
73
+
74
+ function createHeaders(token: string | undefined): Headers {
75
+ const headers = new Headers();
76
+ headers.set('content-type', 'application/json');
77
+ if (token && token.trim().length > 0) {
78
+ headers.set('authorization', `Bearer ${token.trim()}`);
79
+ }
80
+ return headers;
81
+ }
82
+
83
+ function ensureServerBaseUrl(state: ServerState | undefined): string {
84
+ if (!state) {
85
+ throw new Error('start server first');
86
+ }
87
+ return `http://${DEFAULT_HOST}:${state.port}`;
88
+ }
89
+
90
+ async function parseJsonResponse<T>(response: Response): Promise<T> {
91
+ const text = await response.text();
92
+ if (!text.trim()) {
93
+ throw new Error(`Server returned HTTP ${response.status} ${response.statusText} with empty response body.`);
94
+ }
95
+ try {
96
+ return JSON.parse(text) as T;
97
+ } catch {
98
+ throw new Error(`Server returned HTTP ${response.status} ${response.statusText} with invalid JSON response.`);
99
+ }
100
+ }
101
+
102
+ export async function restGet<T>(route: string, authToken?: string): Promise<T> {
103
+ const baseUrl = ensureServerBaseUrl(await readRunningState());
104
+ const response = await fetch(`${baseUrl}${route}`, {
105
+ method: 'GET',
106
+ headers: createHeaders(authToken),
107
+ });
108
+ const payload = await parseJsonResponse<T & { error?: string }>(response);
109
+ if (!response.ok) {
110
+ const message = (payload as { error?: string }).error;
111
+ throw new Error(message && message.trim().length > 0 ? message : `Server request failed: GET ${route} (${response.status}).`);
112
+ }
113
+ return payload;
114
+ }
115
+
116
+ export async function restPost<T>(route: string, body: Record<string, unknown>, authToken?: string): Promise<T> {
117
+ const baseUrl = ensureServerBaseUrl(await readRunningState());
118
+ const response = await fetch(`${baseUrl}${route}`, {
119
+ method: 'POST',
120
+ headers: createHeaders(authToken),
121
+ body: JSON.stringify(body),
122
+ });
123
+ const payload = await parseJsonResponse<Envelope<T> & { error?: string }>(response);
124
+ if (!response.ok) {
125
+ const message = payload.error;
126
+ throw new Error(message && message.trim().length > 0 ? message : `Server request failed: POST ${route} (${response.status}).`);
127
+ }
128
+ if (payload.ok === false) {
129
+ throw new Error(payload.error?.trim() || `Server request failed: POST ${route}.`);
130
+ }
131
+ if (payload.result === undefined) {
132
+ throw new Error(`Server request failed: POST ${route} did not return a result.`);
133
+ }
134
+ return payload.result;
135
+ }
@@ -1,226 +1,65 @@
1
1
  // Copyright (c) 2026 Modelware. All rights reserved.
2
2
 
3
- import { normalizeNamespace } from '@oml/language';
4
- import { createDefaultShaclService, createOwlServices, type ShaclValidationIssue } from '@oml/owl';
5
- import { MarkdownPreviewRuntime, MarkdownHandlerRegistry } from '@oml/markdown';
6
3
  import chalk from 'chalk';
7
- import { URI } from 'langium';
8
- import { NodeFileSystem } from 'langium/node';
9
- import * as fs from 'node:fs/promises';
10
- import * as path from 'node:path';
11
- import * as url from 'node:url';
12
- import { loadPreparedDatasetFromOutput, normalizeFormatExtension } from '../backend/reasoned-output.js';
13
4
  import { failCli } from '../cli-error.js';
14
5
  import { formatDuration } from '../util.js';
15
- import type { ReasonOptions } from './reason.js';
16
- import { reasonAction } from './reason.js';
17
- import { resolveCompileOutputRoot, resolveCompileWorkspaceRoot } from './compile.js';
6
+ import { restPost } from './server/rest.js';
7
+ import { formatLintSummary, printLintDiagnostics, type LintPayload } from './lint.js';
18
8
 
19
- const markdownRuntime = new MarkdownPreviewRuntime(new MarkdownHandlerRegistry());
20
-
21
- export type ValidateOptions = ReasonOptions & {
22
- md: string;
23
- };
24
-
25
- type MarkdownValidationResult = {
26
- markdownFile: string;
27
- blockId: string;
28
- lineStart: number;
29
- lineEnd: number;
30
- contextModelUri?: string;
31
- conforms: boolean;
32
- issues: ShaclValidationIssue[];
33
- error?: string;
9
+ export type ValidateOptions = {
10
+ only?: boolean;
11
+ authToken?: string;
34
12
  };
35
13
 
36
14
  export const validateAction = async (opts: ValidateOptions): Promise<void> => {
37
- const workspaceRoot = resolveCompileWorkspaceRoot(opts.workspace);
38
- const owlOutputRoot = resolveCompileOutputRoot(workspaceRoot, opts.owl);
39
- const rdfFormat = normalizeFormatExtension(opts.format);
40
- const markdownRoot = path.resolve(workspaceRoot, opts.md);
41
-
42
- const markdownStat = await fs.stat(markdownRoot).catch(() => undefined);
43
- if (!markdownStat?.isDirectory()) {
44
- failCli(chalk.red(`Markdown folder does not exist: ${markdownRoot}`));
45
- }
46
-
47
- if (!opts.only) {
48
- await reasonAction({
49
- workspace: workspaceRoot,
50
- owl: owlOutputRoot,
51
- format: rdfFormat,
52
- clean: opts.clean,
53
- pretty: opts.pretty,
54
- only: false,
55
- checkOnly: false,
56
- uniqueNamesAssumption: opts.uniqueNamesAssumption,
57
- explanations: opts.explanations,
58
- profile: opts.profile,
59
- });
60
- }
61
-
62
- const servicesBundle = createOwlServices(NodeFileSystem);
63
- await servicesBundle.Oml.shared.workspace.WorkspaceManager.initializeWorkspace([
64
- { uri: URI.file(workspaceRoot).toString(), name: path.basename(workspaceRoot) }
65
- ]);
66
- const preparedDataset = await loadPreparedDatasetFromOutput(workspaceRoot, owlOutputRoot, rdfFormat);
67
- servicesBundle.Oml.reasoning.ReasoningService.loadPreparedDataset(preparedDataset);
68
- const shaclService = createDefaultShaclService(
69
- servicesBundle.Oml.reasoning.ReasoningService.getSparqlService(),
70
- (modelUri) => servicesBundle.Oml.reasoning.ReasoningService.ensureQueryContext(modelUri),
71
- (modelUri) => servicesBundle.Oml.reasoning.ReasoningService.getContextIri(modelUri),
72
- );
73
-
74
- const validationStartedAt = Date.now();
75
- const markdownFiles = await discoverMarkdownFiles(markdownRoot);
76
- const results: MarkdownValidationResult[] = [];
77
- for (const markdownFile of markdownFiles) {
78
- const markdown = await fs.readFile(markdownFile, 'utf-8');
79
- const prepared = markdownRuntime.prepare(markdown);
80
- const contextModelUri = resolveContextModelUri(markdownFile, prepared.contextUri, workspaceRoot);
81
- for (const block of prepared.codeBlocks) {
82
- if (block.language !== 'table-editor') {
83
- continue;
15
+ const startedAt = Date.now();
16
+ const result = await restPost<{
17
+ success: boolean;
18
+ filesChecked: number;
19
+ errors: number;
20
+ warnings: number;
21
+ elapsedMs?: number;
22
+ lint?: LintPayload;
23
+ error?: string;
24
+ }>('/v0/validate', {
25
+ only: opts.only === true,
26
+ }, opts.authToken);
27
+
28
+ if (result.lint) {
29
+ const lint = result.lint;
30
+ if (lint.filesChecked <= 0) {
31
+ console.log(chalk.yellow('No .oml files found in server workspace.'));
32
+ } else {
33
+ printLintDiagnostics(lint);
34
+ const lintElapsedMs = typeof lint.elapsedMs === 'number' && Number.isFinite(lint.elapsedMs) && lint.elapsedMs >= 0
35
+ ? lint.elapsedMs
36
+ : Date.now() - startedAt;
37
+ const lintSummary = formatLintSummary(lint, lintElapsedMs);
38
+ if (lint.errors > 0) {
39
+ failCli(chalk.red(lintSummary));
84
40
  }
85
- const validation = await shaclService.validateShacl(contextModelUri, block.content);
86
- results.push({
87
- markdownFile,
88
- blockId: block.id,
89
- lineStart: block.lineStart,
90
- lineEnd: block.lineEnd,
91
- contextModelUri,
92
- conforms: validation.conforms,
93
- issues: validation.issues,
94
- error: validation.error,
95
- });
96
- }
97
- }
98
-
99
- reportValidationResults(results, workspaceRoot, markdownRoot, validationStartedAt);
100
- if (results.some((result) => result.error || result.issues.length > 0 || !result.conforms)) {
101
- failCli('');
102
- }
103
- };
104
-
105
- async function discoverMarkdownFiles(root: string): Promise<string[]> {
106
- const entries = await fs.readdir(root, { withFileTypes: true });
107
- const markdownFiles: string[] = [];
108
- for (const entry of entries) {
109
- const fullPath = path.join(root, entry.name);
110
- if (entry.isDirectory()) {
111
- if (entry.name === 'node_modules' || entry.name.startsWith('.')) {
112
- continue;
41
+ if (lint.warnings > 0) {
42
+ failCli(chalk.yellow(lintSummary));
113
43
  }
114
- markdownFiles.push(...await discoverMarkdownFiles(fullPath));
115
- continue;
116
- }
117
- if (entry.isFile() && entry.name.toLowerCase().endsWith('.md')) {
118
- markdownFiles.push(fullPath);
44
+ console.log(chalk.green(lintSummary));
119
45
  }
120
46
  }
121
- return markdownFiles.sort();
122
- }
123
47
 
124
- function resolveContextModelUri(documentFile: string, contextUri: string | undefined, workspaceRoot: string): string | undefined {
125
- if (!contextUri) {
126
- return undefined;
127
- }
128
- const trimmed = contextUri.trim();
129
- if (!trimmed) {
130
- return undefined;
131
- }
132
- if (trimmed.startsWith('workspace:/')) {
133
- const resolved = resolveWorkspacePath(workspaceRoot, trimmed);
134
- return resolved ? url.pathToFileURL(resolved).toString() : undefined;
135
- }
136
- if (/^[a-z][a-z0-9+.-]*:/i.test(trimmed)) {
137
- return trimmed;
48
+ if (!result.success) {
49
+ failCli(chalk.red(result.error?.trim() || 'validate failed.'));
138
50
  }
139
- if (trimmed.startsWith('/')) {
140
- return url.pathToFileURL(path.resolve(workspaceRoot, trimmed.replace(/^\/+/, ''))).toString();
141
- }
142
- return url.pathToFileURL(path.resolve(path.dirname(documentFile), trimmed)).toString();
143
- }
144
-
145
- function resolveWorkspacePath(workspaceRoot: string, href: string): string | undefined {
146
- const trimmed = href.trim();
147
- if (!trimmed.startsWith('workspace:/')) {
148
- return undefined;
149
- }
150
- return path.resolve(workspaceRoot, trimmed.slice('workspace:/'.length));
151
- }
152
-
153
- function reportValidationResults(
154
- results: ReadonlyArray<MarkdownValidationResult>,
155
- workspaceRoot: string,
156
- markdownRoot: string,
157
- startedAt: number
158
- ): void {
159
- if (results.length === 0) {
160
- console.log(chalk.yellow(`No table-editor blocks found under ${path.relative(workspaceRoot, markdownRoot) || markdownRoot}.`));
161
- return;
162
- }
163
-
164
- let issueCount = 0;
165
- let errorCount = 0;
166
- let failingBlockCount = 0;
167
- for (const result of results) {
168
- const relativeFile = path.relative(markdownRoot, result.markdownFile) || path.basename(result.markdownFile);
169
- const location = relativeFile;
170
- if (result.error) {
171
- failingBlockCount += 1;
172
- errorCount += 1;
173
- console.log(chalk.red(`Violation: ${location}: ${result.error}`));
174
- continue;
175
- }
176
- const hasIssues = result.issues.length > 0 || !result.conforms;
177
- if (!hasIssues) {
178
- continue;
179
- }
180
- failingBlockCount += 1;
181
- for (const issue of result.issues) {
182
- issueCount += 1;
183
- const elementLabel = issue.focusNode ? shortIri(issue.focusNode) : '-';
184
- const propertyLabel = issue.propertyName ?? (issue.path ? shortIri(issue.path) : '-');
185
- const severityLabel = shortIri(issue.severity || 'Violation');
186
- console.log(chalk.red(`${severityLabel}: ${location} element=${elementLabel} property=${propertyLabel}: ${describeIssue(issue)}`));
187
- }
188
- if (!result.conforms && result.issues.length === 0) {
189
- issueCount += 1;
190
- console.log(chalk.red(`Violation: ${location}: SHACL validation failed without detailed issues.`));
191
- }
192
- }
193
-
194
- const duration = formatDuration(Date.now() - startedAt);
195
- const summary = `${results.length} table-editor block(s) scanned [${duration}]`;
196
- if (issueCount === 0 && errorCount === 0) {
197
- console.log(chalk.green(`validate: ${summary}`));
51
+ if (result.filesChecked === 0) {
52
+ console.log(chalk.yellow('No markdown/table-editor targets found in server workspace.'));
198
53
  return;
199
54
  }
200
- console.log(chalk.red(`validate: ${summary}; ${failingBlockCount} failing block(s), ${issueCount} issue(s), ${errorCount} error(s)`));
201
- }
202
-
203
- function shortIri(value: string): string {
204
- const normalized = normalizeNamespace(value);
205
- const hashIndex = normalized.lastIndexOf('#');
206
- if (hashIndex >= 0 && hashIndex < normalized.length - 1) {
207
- return normalized.slice(hashIndex + 1);
55
+ const validateElapsedMs = typeof result.elapsedMs === 'number' && Number.isFinite(result.elapsedMs) && result.elapsedMs >= 0
56
+ ? result.elapsedMs
57
+ : Date.now() - startedAt;
58
+ if (result.errors > 0) {
59
+ failCli(chalk.red(`validate: ${result.filesChecked} item(s) checked with ${result.errors} error(s) and ${result.warnings} warning(s). [${formatDuration(validateElapsedMs)}]`));
208
60
  }
209
- const slashIndex = normalized.lastIndexOf('/');
210
- if (slashIndex >= 0 && slashIndex < normalized.length - 1) {
211
- return normalized.slice(slashIndex + 1);
61
+ if (result.warnings > 0) {
62
+ failCli(chalk.yellow(`validate: ${result.filesChecked} item(s) checked with ${result.warnings} warning(s). [${formatDuration(validateElapsedMs)}]`));
212
63
  }
213
- return normalized;
214
- }
215
-
216
- function describeIssue(issue: ShaclValidationIssue): string {
217
- const message = issue.message.trim();
218
- if (message && message !== 'Validation issue.') {
219
- return message;
220
- }
221
- const source = issue.source ? shortIri(issue.source) : undefined;
222
- if (source) {
223
- return source;
224
- }
225
- return 'Validation issue.';
226
- }
64
+ console.log(chalk.green(`validate: ${result.filesChecked} item(s) checked. [${formatDuration(validateElapsedMs)}]`));
65
+ };
package/out/auth.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import type { MdExecuteBlocksParams, MdExecuteBlocksResult } from '@oml/markdown';
2
- export interface ValidateSummary {
3
- filesChecked: number;
4
- warnings: number;
5
- }
6
- export interface MarkdownRenderResult {
7
- renderedHtml: string;
8
- contextUri?: string;
9
- }
10
- export interface CliBackendOptions {
11
- owlOutputRoot?: string;
12
- rdfFormat?: string;
13
- }
14
- export interface CliBackend {
15
- validate(fileName: string | undefined, workspaceRoot: string): Promise<ValidateSummary>;
16
- renderMarkdown(markdown: string): Promise<MarkdownRenderResult>;
17
- executeMarkdownBlocks(params: MdExecuteBlocksParams, workspaceRoot: string): Promise<MdExecuteBlocksResult>;
18
- getContextMemberLabelSnapshot(modelUri: string, workspaceRoot: string): Promise<Record<string, string>>;
19
- getWorkspaceMemberLabelSnapshot(workspaceRoot: string): Promise<Record<string, string>>;
20
- dispose(): Promise<void>;
21
- }
@@ -1,3 +0,0 @@
1
- // Copyright (c) 2026 Modelware. All rights reserved.
2
- export {};
3
- //# sourceMappingURL=backend-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"backend-types.js","sourceRoot":"","sources":["../../src/backend/backend-types.ts"],"names":[],"mappings":"AAAA,qDAAqD"}
@@ -1,2 +0,0 @@
1
- import type { CliBackend, CliBackendOptions } from './backend-types.js';
2
- export declare function createBackend(options?: CliBackendOptions): CliBackend;
@@ -1,6 +0,0 @@
1
- // Copyright (c) 2026 Modelware. All rights reserved.
2
- import { DirectBackend } from './direct-backend.js';
3
- export function createBackend(options = {}) {
4
- return new DirectBackend(options);
5
- }
6
- //# sourceMappingURL=create-backend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-backend.js","sourceRoot":"","sources":["../../src/backend/create-backend.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,UAAU,aAAa,CAAC,UAA6B,EAAE;IACzD,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -1,20 +0,0 @@
1
- import { type MdExecuteBlocksParams, type MdExecuteBlocksResult } from '@oml/markdown';
2
- import type { CliBackend, CliBackendOptions, MarkdownRenderResult, ValidateSummary } from './backend-types.js';
3
- export declare class DirectBackend implements CliBackend {
4
- private readonly markdownRuntime;
5
- private readonly owlOutputRoot?;
6
- private readonly rdfFormat;
7
- private readonly contextLabelSnapshots;
8
- private servicesBundle?;
9
- private initializedWorkspaceRoot?;
10
- private loadedDatasetKey?;
11
- constructor(options?: CliBackendOptions);
12
- validate(fileName: string | undefined, workspaceRoot: string): Promise<ValidateSummary>;
13
- renderMarkdown(markdown: string): Promise<MarkdownRenderResult>;
14
- executeMarkdownBlocks(params: MdExecuteBlocksParams, workspaceRoot: string): Promise<MdExecuteBlocksResult>;
15
- getContextMemberLabelSnapshot(modelUri: string, workspaceRoot: string): Promise<Record<string, string>>;
16
- getWorkspaceMemberLabelSnapshot(workspaceRoot: string): Promise<Record<string, string>>;
17
- dispose(): Promise<void>;
18
- private ensureServices;
19
- private ensurePreparedDataset;
20
- }
@@ -1,150 +0,0 @@
1
- // Copyright (c) 2026 Modelware. All rights reserved.
2
- import { createOwlServices } from '@oml/owl';
3
- import { MarkdownHandlerRegistry, MarkdownPreviewRuntime } from '@oml/markdown';
4
- import { MarkdownExecutor } from '@oml/markdown';
5
- import { getOntologyModelIndex } from '@oml/language';
6
- import { NodeFileSystem } from 'langium/node';
7
- import { URI } from 'langium';
8
- import * as fs from 'node:fs/promises';
9
- import * as path from 'node:path';
10
- import { extractDocument } from '../util.js';
11
- import { loadPreparedDatasetFromOutput, normalizeFormatExtension } from './reasoned-output.js';
12
- export class DirectBackend {
13
- constructor(options = {}) {
14
- this.markdownRuntime = new MarkdownPreviewRuntime(new MarkdownHandlerRegistry());
15
- this.contextLabelSnapshots = new Map();
16
- this.owlOutputRoot = options.owlOutputRoot ? path.resolve(options.owlOutputRoot) : undefined;
17
- this.rdfFormat = normalizeFormatExtension(options.rdfFormat);
18
- }
19
- async validate(fileName, workspaceRoot) {
20
- const services = await this.ensureServices(workspaceRoot);
21
- if (fileName) {
22
- const document = await extractDocument(fileName, services, undefined);
23
- const warnings = (document.diagnostics ?? []).filter((d) => d.severity === 2).length;
24
- return { filesChecked: 1, warnings };
25
- }
26
- const files = await findOmlFiles(workspaceRoot);
27
- let warningCount = 0;
28
- for (const file of files) {
29
- const document = await extractDocument(file, services, undefined);
30
- warningCount += (document.diagnostics ?? []).filter((d) => d.severity === 2).length;
31
- }
32
- return { filesChecked: files.length, warnings: warningCount };
33
- }
34
- async renderMarkdown(markdown) {
35
- const rendered = this.markdownRuntime.prepare(markdown);
36
- return {
37
- renderedHtml: rendered.renderedHtml,
38
- contextUri: rendered.contextUri
39
- };
40
- }
41
- async executeMarkdownBlocks(params, workspaceRoot) {
42
- const services = await this.ensureServices(workspaceRoot);
43
- await this.ensurePreparedDataset(workspaceRoot, services);
44
- const reasoningService = services.reasoning.ReasoningService;
45
- const ontologyIndex = getOntologyModelIndex(services.shared);
46
- const knownNamespaceCache = new Map();
47
- const isKnownOntologyIriNamespace = (ontologyIri) => {
48
- const normalized = ontologyIri.trim().replace(/[\/#]+$/, '');
49
- if (!normalized) {
50
- return false;
51
- }
52
- const cached = knownNamespaceCache.get(normalized);
53
- if (cached !== undefined) {
54
- return cached;
55
- }
56
- if (ontologyIndex.resolveModelUri(normalized)) {
57
- knownNamespaceCache.set(normalized, true);
58
- return true;
59
- }
60
- const exists = ontologyIndex.getDuplicateWorkspaceModelUris(normalized).length > 0;
61
- knownNamespaceCache.set(normalized, exists);
62
- return exists;
63
- };
64
- const executor = new MarkdownExecutor({
65
- ensureContext: (modelUri) => reasoningService.ensureQueryContext(modelUri),
66
- resolveContextIri: (modelUri) => reasoningService.getContextIri(modelUri),
67
- query: (modelUri, sparql) => reasoningService.getSparqlService().query(modelUri, sparql),
68
- construct: (modelUri, sparql) => reasoningService.getSparqlService().construct(modelUri, sparql),
69
- isKnownOntologyIriNamespace,
70
- });
71
- return executor.executeBlocks(params);
72
- }
73
- async getContextMemberLabelSnapshot(modelUri, workspaceRoot) {
74
- const resolvedModelUri = modelUri.trim();
75
- if (!resolvedModelUri) {
76
- return {};
77
- }
78
- const cached = this.contextLabelSnapshots.get(resolvedModelUri);
79
- if (cached) {
80
- return cached;
81
- }
82
- const services = await this.ensureServices(workspaceRoot);
83
- await this.ensurePreparedDataset(workspaceRoot, services);
84
- const reasoningService = services.reasoning.ReasoningService;
85
- const snapshot = await reasoningService.getContextMemberLabelSnapshot(resolvedModelUri);
86
- this.contextLabelSnapshots.set(resolvedModelUri, snapshot);
87
- return snapshot;
88
- }
89
- async getWorkspaceMemberLabelSnapshot(workspaceRoot) {
90
- const cacheKey = `workspace:${path.resolve(workspaceRoot)}`;
91
- const cached = this.contextLabelSnapshots.get(cacheKey);
92
- if (cached) {
93
- return cached;
94
- }
95
- const services = await this.ensureServices(workspaceRoot);
96
- await this.ensurePreparedDataset(workspaceRoot, services);
97
- const reasoningService = services.reasoning.ReasoningService;
98
- const snapshot = await reasoningService.getWorkspaceMemberLabelSnapshot();
99
- this.contextLabelSnapshots.set(cacheKey, snapshot);
100
- return snapshot;
101
- }
102
- async dispose() {
103
- this.servicesBundle = undefined;
104
- this.initializedWorkspaceRoot = undefined;
105
- this.loadedDatasetKey = undefined;
106
- this.contextLabelSnapshots.clear();
107
- }
108
- async ensureServices(workspaceRoot) {
109
- const resolvedRoot = path.resolve(workspaceRoot);
110
- if (!this.servicesBundle || this.initializedWorkspaceRoot !== resolvedRoot) {
111
- this.servicesBundle = createOwlServices(NodeFileSystem);
112
- this.initializedWorkspaceRoot = resolvedRoot;
113
- this.contextLabelSnapshots.clear();
114
- await this.servicesBundle.Oml.shared.workspace.WorkspaceManager.initializeWorkspace([
115
- { uri: URI.file(resolvedRoot).toString(), name: path.basename(resolvedRoot) }
116
- ]);
117
- }
118
- return this.servicesBundle.Oml;
119
- }
120
- async ensurePreparedDataset(workspaceRoot, services) {
121
- if (!this.owlOutputRoot) {
122
- throw new Error('CLI markdown execution requires a prepared RDF output folder.');
123
- }
124
- const datasetKey = `${this.initializedWorkspaceRoot ?? ''}|${this.owlOutputRoot}|${this.rdfFormat}`;
125
- if (this.loadedDatasetKey === datasetKey) {
126
- return;
127
- }
128
- const prepared = await loadPreparedDatasetFromOutput(path.resolve(workspaceRoot), this.owlOutputRoot, this.rdfFormat);
129
- services.reasoning.ReasoningService.loadPreparedDataset(prepared);
130
- this.loadedDatasetKey = datasetKey;
131
- }
132
- }
133
- async function findOmlFiles(root) {
134
- const entries = await fs.readdir(root, { withFileTypes: true });
135
- const results = [];
136
- for (const entry of entries) {
137
- const fullPath = path.join(root, entry.name);
138
- if (entry.isDirectory()) {
139
- if (entry.name === 'node_modules' || entry.name.startsWith('.')) {
140
- continue;
141
- }
142
- results.push(...await findOmlFiles(fullPath));
143
- }
144
- else if (entry.isFile() && path.extname(entry.name) === '.oml') {
145
- results.push(fullPath);
146
- }
147
- }
148
- return results;
149
- }
150
- //# sourceMappingURL=direct-backend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"direct-backend.js","sourceRoot":"","sources":["../../src/backend/direct-backend.ts"],"names":[],"mappings":"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"}