superdb-mcp 0.51231.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,86 @@
1
+ interface Position {
2
+ line: number;
3
+ character: number;
4
+ }
5
+ interface CompletionItem {
6
+ label: string;
7
+ kind?: number;
8
+ detail?: string;
9
+ documentation?: string | {
10
+ kind: string;
11
+ value: string;
12
+ };
13
+ insertText?: string;
14
+ }
15
+ interface Diagnostic {
16
+ range: {
17
+ start: Position;
18
+ end: Position;
19
+ };
20
+ severity?: number;
21
+ message: string;
22
+ source?: string;
23
+ }
24
+ interface HoverResult {
25
+ contents: string | {
26
+ kind: string;
27
+ value: string;
28
+ };
29
+ range?: {
30
+ start: Position;
31
+ end: Position;
32
+ };
33
+ }
34
+ export interface LSPClientOptions {
35
+ lspPath?: string;
36
+ timeout?: number;
37
+ }
38
+ export interface LSPAvailability {
39
+ available: boolean;
40
+ path: string | null;
41
+ error: string | null;
42
+ }
43
+ /**
44
+ * Get the path to the LSP server
45
+ */
46
+ export declare function getLspPath(): string | null;
47
+ /**
48
+ * Check if the LSP server is available
49
+ */
50
+ export declare function checkLspAvailability(): LSPAvailability;
51
+ /**
52
+ * Simple LSP client that spawns the server, sends a request, and gets a response
53
+ * Uses a fresh process per request for simplicity
54
+ */
55
+ export declare class LSPClient {
56
+ private lspPath;
57
+ private timeout;
58
+ private messageId;
59
+ constructor(options?: LSPClientOptions);
60
+ /**
61
+ * Send a request to the LSP and get a response
62
+ */
63
+ private sendRequest;
64
+ /**
65
+ * Format a JSON-RPC message with Content-Length header
66
+ */
67
+ private formatMessage;
68
+ /**
69
+ * Get completions at a position in a query
70
+ */
71
+ getCompletions(query: string, line: number, character: number): Promise<CompletionItem[]>;
72
+ /**
73
+ * Get hover documentation at a position
74
+ */
75
+ getHover(query: string, line: number, character: number): Promise<HoverResult | null>;
76
+ /**
77
+ * Get diagnostics for a query
78
+ */
79
+ getDiagnostics(query: string): Promise<Diagnostic[]>;
80
+ }
81
+ /**
82
+ * Get the LSP client, or null if not available
83
+ */
84
+ export declare function getLspClient(): LSPClient | null;
85
+ export {};
86
+ //# sourceMappingURL=lsp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-client.d.ts","sourceRoot":"","sources":["../../src/lib/lsp-client.ts"],"names":[],"mappings":"AAkBA,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,UAAU;IAClB,KAAK,EAAE;QACL,KAAK,EAAE,QAAQ,CAAC;QAChB,GAAG,EAAE,QAAQ,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,QAAQ,CAAC;QAChB,GAAG,EAAE,QAAQ,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAsCtD;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAa;gBAElB,OAAO,GAAE,gBAAqB;IAS1C;;OAEG;YACW,WAAW;IAyGzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAkC/F;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAyB3F;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAM3D;AASD;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,GAAG,IAAI,CAqB/C"}
@@ -0,0 +1,267 @@
1
+ import { spawn } from 'child_process';
2
+ /**
3
+ * Get the path to the LSP server
4
+ */
5
+ export function getLspPath() {
6
+ return process.env.SUPERDB_LSP_PATH || null;
7
+ }
8
+ /**
9
+ * Check if the LSP server is available
10
+ */
11
+ export function checkLspAvailability() {
12
+ const lspPath = getLspPath();
13
+ if (!lspPath) {
14
+ return {
15
+ available: false,
16
+ path: null,
17
+ error: 'SUPERDB_LSP_PATH environment variable not set. Install superdb-lsp for enhanced features.',
18
+ };
19
+ }
20
+ try {
21
+ const { spawnSync } = require('child_process');
22
+ const result = spawnSync(lspPath, ['--help'], {
23
+ timeout: 2000,
24
+ encoding: 'utf-8',
25
+ });
26
+ if (result.error || result.status !== 0) {
27
+ return {
28
+ available: false,
29
+ path: lspPath,
30
+ error: `LSP server at ${lspPath} is not working: ${result.error?.message || 'unknown error'}`,
31
+ };
32
+ }
33
+ return {
34
+ available: true,
35
+ path: lspPath,
36
+ error: null,
37
+ };
38
+ }
39
+ catch (e) {
40
+ return {
41
+ available: false,
42
+ path: lspPath,
43
+ error: `Failed to check LSP: ${e instanceof Error ? e.message : String(e)}`,
44
+ };
45
+ }
46
+ }
47
+ /**
48
+ * Simple LSP client that spawns the server, sends a request, and gets a response
49
+ * Uses a fresh process per request for simplicity
50
+ */
51
+ export class LSPClient {
52
+ lspPath;
53
+ timeout;
54
+ messageId = 0;
55
+ constructor(options = {}) {
56
+ const path = options.lspPath || getLspPath();
57
+ if (!path) {
58
+ throw new Error('LSP path not configured. Set SUPERDB_LSP_PATH environment variable.');
59
+ }
60
+ this.lspPath = path;
61
+ this.timeout = options.timeout || 5000;
62
+ }
63
+ /**
64
+ * Send a request to the LSP and get a response
65
+ */
66
+ async sendRequest(method, params) {
67
+ return new Promise((resolve, reject) => {
68
+ const proc = spawn(this.lspPath, [], {
69
+ stdio: ['pipe', 'pipe', 'pipe'],
70
+ });
71
+ let stdout = '';
72
+ let stderr = '';
73
+ let resolved = false;
74
+ const timeoutId = setTimeout(() => {
75
+ if (!resolved) {
76
+ resolved = true;
77
+ proc.kill();
78
+ reject(new Error(`LSP request timed out after ${this.timeout}ms`));
79
+ }
80
+ }, this.timeout);
81
+ proc.stdout.on('data', (chunk) => {
82
+ stdout += chunk.toString();
83
+ // Try to parse response
84
+ const match = stdout.match(/Content-Length: (\d+)\r\n\r\n([\s\S]*)/);
85
+ if (match) {
86
+ const contentLength = parseInt(match[1]);
87
+ const body = match[2];
88
+ if (body.length >= contentLength) {
89
+ try {
90
+ const response = JSON.parse(body.slice(0, contentLength));
91
+ if (response.id === this.messageId) {
92
+ clearTimeout(timeoutId);
93
+ resolved = true;
94
+ proc.kill();
95
+ if (response.error) {
96
+ reject(new Error(response.error.message));
97
+ }
98
+ else {
99
+ resolve(response.result);
100
+ }
101
+ }
102
+ }
103
+ catch {
104
+ // Continue reading
105
+ }
106
+ }
107
+ }
108
+ });
109
+ proc.stderr.on('data', (chunk) => {
110
+ stderr += chunk.toString();
111
+ });
112
+ proc.on('error', (err) => {
113
+ if (!resolved) {
114
+ clearTimeout(timeoutId);
115
+ resolved = true;
116
+ reject(new Error(`LSP process error: ${err.message}`));
117
+ }
118
+ });
119
+ proc.on('close', (code) => {
120
+ if (!resolved) {
121
+ clearTimeout(timeoutId);
122
+ resolved = true;
123
+ if (code !== 0) {
124
+ reject(new Error(`LSP process exited with code ${code}: ${stderr}`));
125
+ }
126
+ }
127
+ });
128
+ // Send initialize request first
129
+ this.messageId++;
130
+ const initMessage = this.formatMessage({
131
+ jsonrpc: '2.0',
132
+ id: this.messageId,
133
+ method: 'initialize',
134
+ params: {
135
+ processId: process.pid,
136
+ capabilities: {},
137
+ rootUri: null,
138
+ },
139
+ });
140
+ proc.stdin.write(initMessage);
141
+ // Wait a bit then send the actual request
142
+ setTimeout(() => {
143
+ // Send initialized notification
144
+ const initializedMessage = this.formatMessage({
145
+ jsonrpc: '2.0',
146
+ method: 'initialized',
147
+ params: {},
148
+ });
149
+ proc.stdin.write(initializedMessage);
150
+ // Send the actual request
151
+ this.messageId++;
152
+ const requestMessage = this.formatMessage({
153
+ jsonrpc: '2.0',
154
+ id: this.messageId,
155
+ method,
156
+ params,
157
+ });
158
+ proc.stdin.write(requestMessage);
159
+ }, 100);
160
+ });
161
+ }
162
+ /**
163
+ * Format a JSON-RPC message with Content-Length header
164
+ */
165
+ formatMessage(message) {
166
+ const content = JSON.stringify(message);
167
+ return `Content-Length: ${content.length}\r\n\r\n${content}`;
168
+ }
169
+ /**
170
+ * Get completions at a position in a query
171
+ */
172
+ async getCompletions(query, line, character) {
173
+ try {
174
+ // Create a virtual document
175
+ const uri = 'file:///virtual/query.spq';
176
+ // Open the document
177
+ await this.sendRequest('textDocument/didOpen', {
178
+ textDocument: {
179
+ uri,
180
+ languageId: 'spq',
181
+ version: 1,
182
+ text: query,
183
+ },
184
+ });
185
+ // Request completions
186
+ const result = await this.sendRequest('textDocument/completion', {
187
+ textDocument: { uri },
188
+ position: { line, character },
189
+ });
190
+ if (Array.isArray(result)) {
191
+ return result;
192
+ }
193
+ if (result && typeof result === 'object' && 'items' in result) {
194
+ return result.items;
195
+ }
196
+ return [];
197
+ }
198
+ catch (e) {
199
+ console.error('LSP completion error:', e);
200
+ return [];
201
+ }
202
+ }
203
+ /**
204
+ * Get hover documentation at a position
205
+ */
206
+ async getHover(query, line, character) {
207
+ try {
208
+ const uri = 'file:///virtual/query.spq';
209
+ await this.sendRequest('textDocument/didOpen', {
210
+ textDocument: {
211
+ uri,
212
+ languageId: 'spq',
213
+ version: 1,
214
+ text: query,
215
+ },
216
+ });
217
+ const result = await this.sendRequest('textDocument/hover', {
218
+ textDocument: { uri },
219
+ position: { line, character },
220
+ });
221
+ return result;
222
+ }
223
+ catch (e) {
224
+ console.error('LSP hover error:', e);
225
+ return null;
226
+ }
227
+ }
228
+ /**
229
+ * Get diagnostics for a query
230
+ */
231
+ async getDiagnostics(query) {
232
+ // The LSP sends diagnostics via notifications after didOpen
233
+ // For now, we use super compile for validation
234
+ // This is a placeholder for future LSP diagnostic support
235
+ return [];
236
+ }
237
+ }
238
+ /**
239
+ * Singleton instance with lazy initialization
240
+ */
241
+ let lspClient = null;
242
+ let lspCheckDone = false;
243
+ let lspAvailable = false;
244
+ /**
245
+ * Get the LSP client, or null if not available
246
+ */
247
+ export function getLspClient() {
248
+ if (!lspCheckDone) {
249
+ const availability = checkLspAvailability();
250
+ lspAvailable = availability.available;
251
+ lspCheckDone = true;
252
+ }
253
+ if (!lspAvailable) {
254
+ return null;
255
+ }
256
+ if (!lspClient) {
257
+ try {
258
+ lspClient = new LSPClient();
259
+ }
260
+ catch {
261
+ lspAvailable = false;
262
+ return null;
263
+ }
264
+ }
265
+ return lspClient;
266
+ }
267
+ //# sourceMappingURL=lsp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-client.js","sourceRoot":"","sources":["../../src/lib/lsp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface SuperResult {
2
+ stdout: string;
3
+ stderr: string;
4
+ exitCode: number;
5
+ }
6
+ /**
7
+ * Get the path to the super binary
8
+ */
9
+ export declare function getSuperPath(): string;
10
+ /**
11
+ * Execute the super binary with given arguments
12
+ */
13
+ export declare function runSuper(args: string[], stdin?: string): Promise<SuperResult>;
14
+ /**
15
+ * Execute super db commands
16
+ */
17
+ export declare function runSuperDb(subcommand: string, args: string[], lake?: string): Promise<SuperResult>;
18
+ /**
19
+ * Parse newline-delimited JSON output from super
20
+ */
21
+ export declare function parseNDJSON(output: string): unknown[];
22
+ /**
23
+ * Safely parse JSON, returning null on failure
24
+ */
25
+ export declare function tryParseJSON(text: string): unknown | null;
26
+ //# sourceMappingURL=super.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"super.d.ts","sourceRoot":"","sources":["../../src/lib/super.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA2BnF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAOxG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAGrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAMzD"}
@@ -0,0 +1,63 @@
1
+ import { spawn } from 'child_process';
2
+ /**
3
+ * Get the path to the super binary
4
+ */
5
+ export function getSuperPath() {
6
+ return process.env.SUPER_PATH || 'super';
7
+ }
8
+ /**
9
+ * Execute the super binary with given arguments
10
+ */
11
+ export async function runSuper(args, stdin) {
12
+ return new Promise((resolve, reject) => {
13
+ const proc = spawn(getSuperPath(), args);
14
+ let stdout = '';
15
+ let stderr = '';
16
+ if (stdin !== undefined) {
17
+ proc.stdin.write(stdin);
18
+ proc.stdin.end();
19
+ }
20
+ proc.stdout.on('data', (chunk) => {
21
+ stdout += chunk.toString();
22
+ });
23
+ proc.stderr.on('data', (chunk) => {
24
+ stderr += chunk.toString();
25
+ });
26
+ proc.on('close', (code) => {
27
+ resolve({ stdout, stderr, exitCode: code ?? 1 });
28
+ });
29
+ proc.on('error', (err) => {
30
+ reject(new Error(`Failed to spawn super: ${err.message}`));
31
+ });
32
+ });
33
+ }
34
+ /**
35
+ * Execute super db commands
36
+ */
37
+ export async function runSuperDb(subcommand, args, lake) {
38
+ const fullArgs = ['db', subcommand];
39
+ if (lake) {
40
+ fullArgs.push('-lake', lake);
41
+ }
42
+ fullArgs.push(...args);
43
+ return runSuper(fullArgs);
44
+ }
45
+ /**
46
+ * Parse newline-delimited JSON output from super
47
+ */
48
+ export function parseNDJSON(output) {
49
+ const lines = output.trim().split('\n').filter(Boolean);
50
+ return lines.map(line => JSON.parse(line));
51
+ }
52
+ /**
53
+ * Safely parse JSON, returning null on failure
54
+ */
55
+ export function tryParseJSON(text) {
56
+ try {
57
+ return JSON.parse(text);
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
63
+ //# sourceMappingURL=super.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"super.js","sourceRoot":"","sources":["../../src/lib/super.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAQtC;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc,EAAE,KAAc;IAC3D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,IAAc,EAAE,IAAa;IAChF,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACpC,IAAI,IAAI,EAAE,CAAC;QACT,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,57 @@
1
+ export interface VersionInfo {
2
+ version: string;
3
+ raw: string;
4
+ date: Date | null;
5
+ sha: string | null;
6
+ timestamp: string | null;
7
+ path: string;
8
+ source: 'env' | 'path' | 'override';
9
+ }
10
+ export interface VersionComparison {
11
+ current: VersionInfo;
12
+ compareTo: VersionInfo;
13
+ daysDiff: number;
14
+ currentIsNewer: boolean;
15
+ compatible: boolean;
16
+ warnings: string[];
17
+ }
18
+ /**
19
+ * Get the path to the super binary
20
+ */
21
+ export declare function getSuperPath(): string;
22
+ /**
23
+ * Detect the SuperDB version from the configured binary
24
+ */
25
+ export declare function detectVersion(superPath?: string): VersionInfo;
26
+ /**
27
+ * Parse a YMMDD version string to a Date
28
+ * Format: 0.YMMDD (e.g., 0.51231 = 2025-12-31)
29
+ */
30
+ export declare function parseYMMDDVersion(version: string): Date | null;
31
+ /**
32
+ * Compare two version strings
33
+ * Returns: -1 if a < b, 0 if a == b, 1 if a > b
34
+ */
35
+ export declare function compareVersions(a: string, b: string): -1 | 0 | 1;
36
+ /**
37
+ * Check if the current version is at least the required version
38
+ */
39
+ export declare function isVersionAtLeast(required: string, current?: string): boolean;
40
+ /**
41
+ * Compare two SuperDB versions and return detailed info
42
+ */
43
+ export declare function compareVersionInfo(currentPath?: string, compareToPath?: string): VersionComparison;
44
+ /**
45
+ * Read version from embedded docs frontmatter
46
+ */
47
+ export declare function getDocsVersion(): string;
48
+ /**
49
+ * Check compatibility between runtime and docs
50
+ */
51
+ export declare function checkDocsCompatibility(): {
52
+ runtime: VersionInfo;
53
+ docs: string;
54
+ compatible: boolean;
55
+ warnings: string[];
56
+ };
57
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,WAAW,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAmDD;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,CA8C7D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAS9D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAqBhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAG5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,GACrB,iBAAiB,CAqCnB;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI;IACxC,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CA0BA"}