partnercore-proxy 0.1.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.
Files changed (73) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/LICENSE +22 -0
  3. package/README.md +234 -0
  4. package/dist/al/extension-manager.d.ts +52 -0
  5. package/dist/al/extension-manager.d.ts.map +1 -0
  6. package/dist/al/extension-manager.js +348 -0
  7. package/dist/al/extension-manager.js.map +1 -0
  8. package/dist/al/index.d.ts +3 -0
  9. package/dist/al/index.d.ts.map +1 -0
  10. package/dist/al/index.js +19 -0
  11. package/dist/al/index.js.map +1 -0
  12. package/dist/al/language-server.d.ts +134 -0
  13. package/dist/al/language-server.d.ts.map +1 -0
  14. package/dist/al/language-server.js +431 -0
  15. package/dist/al/language-server.js.map +1 -0
  16. package/dist/cli.d.ts +8 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +207 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/cloud/index.d.ts +2 -0
  21. package/dist/cloud/index.d.ts.map +1 -0
  22. package/dist/cloud/index.js +18 -0
  23. package/dist/cloud/index.js.map +1 -0
  24. package/dist/cloud/relay-client.d.ts +84 -0
  25. package/dist/cloud/relay-client.d.ts.map +1 -0
  26. package/dist/cloud/relay-client.js +211 -0
  27. package/dist/cloud/relay-client.js.map +1 -0
  28. package/dist/config/index.d.ts +3 -0
  29. package/dist/config/index.d.ts.map +1 -0
  30. package/dist/config/index.js +19 -0
  31. package/dist/config/index.js.map +1 -0
  32. package/dist/config/loader.d.ts +20 -0
  33. package/dist/config/loader.d.ts.map +1 -0
  34. package/dist/config/loader.js +136 -0
  35. package/dist/config/loader.js.map +1 -0
  36. package/dist/config/types.d.ts +51 -0
  37. package/dist/config/types.d.ts.map +1 -0
  38. package/dist/config/types.js +33 -0
  39. package/dist/config/types.js.map +1 -0
  40. package/dist/index.d.ts +13 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +29 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/mcp/index.d.ts +2 -0
  45. package/dist/mcp/index.d.ts.map +1 -0
  46. package/dist/mcp/index.js +18 -0
  47. package/dist/mcp/index.js.map +1 -0
  48. package/dist/mcp/server.d.ts +33 -0
  49. package/dist/mcp/server.d.ts.map +1 -0
  50. package/dist/mcp/server.js +98 -0
  51. package/dist/mcp/server.js.map +1 -0
  52. package/dist/router/index.d.ts +2 -0
  53. package/dist/router/index.d.ts.map +1 -0
  54. package/dist/router/index.js +18 -0
  55. package/dist/router/index.js.map +1 -0
  56. package/dist/router/tool-router.d.ts +87 -0
  57. package/dist/router/tool-router.d.ts.map +1 -0
  58. package/dist/router/tool-router.js +557 -0
  59. package/dist/router/tool-router.js.map +1 -0
  60. package/dist/utils/index.d.ts +3 -0
  61. package/dist/utils/index.d.ts.map +1 -0
  62. package/dist/utils/index.js +19 -0
  63. package/dist/utils/index.js.map +1 -0
  64. package/dist/utils/logger.d.ts +20 -0
  65. package/dist/utils/logger.d.ts.map +1 -0
  66. package/dist/utils/logger.js +99 -0
  67. package/dist/utils/logger.js.map +1 -0
  68. package/dist/utils/security.d.ts +66 -0
  69. package/dist/utils/security.d.ts.map +1 -0
  70. package/dist/utils/security.js +358 -0
  71. package/dist/utils/security.js.map +1 -0
  72. package/mcp.json +125 -0
  73. package/package.json +107 -0
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ /**
3
+ * AL Extension Manager
4
+ *
5
+ * Handles downloading and managing the Microsoft AL Language extension
6
+ * which contains the EditorServices.Host executable for LSP communication.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.ALExtensionManager = void 0;
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ const axios_1 = __importDefault(require("axios"));
49
+ const decompress_1 = __importDefault(require("decompress"));
50
+ const logger_js_1 = require("../utils/logger.js");
51
+ const MARKETPLACE_API = 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery';
52
+ const AL_EXTENSION_ID = 'ms-dynamics-smb.al';
53
+ /**
54
+ * AL Extension Manager
55
+ */
56
+ class ALExtensionManager {
57
+ config;
58
+ logger = (0, logger_js_1.getLogger)();
59
+ constructor(config) {
60
+ this.config = config;
61
+ }
62
+ /**
63
+ * Get or download the AL extension
64
+ */
65
+ async getExtension() {
66
+ // Check if custom path specified
67
+ if (this.config.extensionPath) {
68
+ return this.loadExistingExtension(this.config.extensionPath);
69
+ }
70
+ // Check cache
71
+ const cached = this.findCachedExtension();
72
+ if (cached) {
73
+ this.logger.info(`Using cached AL extension: ${cached.version}`);
74
+ return cached;
75
+ }
76
+ // Download from marketplace
77
+ return this.downloadExtension();
78
+ }
79
+ /**
80
+ * Load an existing extension from a specified path
81
+ */
82
+ loadExistingExtension(extensionPath) {
83
+ const editorServicesPath = this.findEditorServices(extensionPath);
84
+ if (!editorServicesPath) {
85
+ throw new Error(`EditorServices.Host not found in: ${extensionPath}`);
86
+ }
87
+ // Try to get version from package.json
88
+ const packageJsonPath = path.join(extensionPath, 'package.json');
89
+ let version = 'unknown';
90
+ if (fs.existsSync(packageJsonPath)) {
91
+ try {
92
+ const content = fs.readFileSync(packageJsonPath, 'utf-8');
93
+ const pkg = JSON.parse(content);
94
+ version = pkg.version || 'unknown';
95
+ }
96
+ catch {
97
+ // Ignore parse errors
98
+ }
99
+ }
100
+ return {
101
+ path: extensionPath,
102
+ editorServicesPath,
103
+ version,
104
+ };
105
+ }
106
+ /**
107
+ * Find cached extension
108
+ */
109
+ findCachedExtension() {
110
+ const cacheDir = this.config.extensionCachePath;
111
+ if (!fs.existsSync(cacheDir)) {
112
+ return null;
113
+ }
114
+ // Look for extension directories
115
+ const entries = fs.readdirSync(cacheDir);
116
+ for (const entry of entries) {
117
+ const entryPath = path.join(cacheDir, entry);
118
+ const stat = fs.statSync(entryPath);
119
+ if (stat.isDirectory()) {
120
+ const editorServicesPath = this.findEditorServices(entryPath);
121
+ if (editorServicesPath) {
122
+ // Extract version from directory name or package.json
123
+ const version = entry.replace('al-', '') || 'cached';
124
+ return {
125
+ path: entryPath,
126
+ editorServicesPath,
127
+ version,
128
+ };
129
+ }
130
+ }
131
+ }
132
+ return null;
133
+ }
134
+ /**
135
+ * Download extension from VS Code Marketplace
136
+ */
137
+ async downloadExtension() {
138
+ this.logger.info('Downloading AL extension from VS Code Marketplace...');
139
+ // Query marketplace for extension info
140
+ const versionInfo = await this.queryMarketplace();
141
+ if (!versionInfo) {
142
+ throw new Error('Failed to find AL extension in marketplace');
143
+ }
144
+ this.logger.info(`Found AL extension version: ${versionInfo.version}`);
145
+ // Download VSIX
146
+ const vsixUrl = `${versionInfo.assetUri}/Microsoft.VisualStudio.Services.VSIXPackage`;
147
+ const vsixPath = path.join(this.config.extensionCachePath, `al-${versionInfo.version}.vsix`);
148
+ const extractPath = path.join(this.config.extensionCachePath, `al-${versionInfo.version}`);
149
+ // Ensure cache directory exists
150
+ fs.mkdirSync(this.config.extensionCachePath, { recursive: true });
151
+ // Download
152
+ await this.downloadFile(vsixUrl, vsixPath);
153
+ // Verify download
154
+ if (!fs.existsSync(vsixPath)) {
155
+ throw new Error(`VSIX file not downloaded: ${vsixPath}`);
156
+ }
157
+ const vsixSize = fs.statSync(vsixPath).size;
158
+ this.logger.debug(`Downloaded VSIX: ${vsixSize} bytes`);
159
+ if (vsixSize < 1000) {
160
+ throw new Error(`VSIX file too small (${vsixSize} bytes), download may have failed`);
161
+ }
162
+ // Extract
163
+ this.logger.info('Extracting AL extension...');
164
+ try {
165
+ const files = await (0, decompress_1.default)(vsixPath, extractPath);
166
+ this.logger.debug(`Extracted ${files.length} files`);
167
+ if (files.length === 0) {
168
+ throw new Error('No files extracted from VSIX');
169
+ }
170
+ }
171
+ catch (extractError) {
172
+ this.logger.error('Extraction failed:', extractError);
173
+ // Keep VSIX for debugging
174
+ const errorMessage = extractError instanceof Error ? extractError.message : String(extractError);
175
+ throw new Error(`Failed to extract VSIX: ${errorMessage}`);
176
+ }
177
+ // Clean up VSIX
178
+ fs.unlinkSync(vsixPath);
179
+ // Find EditorServices
180
+ const editorServicesPath = this.findEditorServices(extractPath);
181
+ if (!editorServicesPath) {
182
+ // List what was extracted for debugging
183
+ const extracted = this.listFilesRecursive(extractPath, 3);
184
+ this.logger.debug(`Extracted files: ${extracted.join(', ')}`);
185
+ throw new Error('EditorServices.Host not found in downloaded extension');
186
+ }
187
+ this.logger.info(`AL extension ready: ${extractPath}`);
188
+ return {
189
+ path: extractPath,
190
+ editorServicesPath,
191
+ version: versionInfo.version,
192
+ };
193
+ }
194
+ /**
195
+ * Query VS Code Marketplace for extension info
196
+ */
197
+ async queryMarketplace() {
198
+ try {
199
+ // Flags: 0x1 (IncludeVersions) | 0x2 (IncludeFiles) | 0x80 (IncludeAssetUri) | 0x200 (IncludeVersionProperties)
200
+ const FLAGS = 0x1 | 0x2 | 0x80 | 0x200;
201
+ const response = await axios_1.default.post(MARKETPLACE_API, {
202
+ filters: [
203
+ {
204
+ criteria: [
205
+ { filterType: 7, value: AL_EXTENSION_ID },
206
+ ],
207
+ },
208
+ ],
209
+ flags: FLAGS,
210
+ }, {
211
+ headers: {
212
+ 'Content-Type': 'application/json',
213
+ 'Accept': 'application/json;api-version=6.0-preview.1',
214
+ },
215
+ });
216
+ const extension = response.data?.results?.[0]?.extensions?.[0];
217
+ if (!extension?.versions?.[0]) {
218
+ return null;
219
+ }
220
+ const latestVersion = extension.versions[0];
221
+ // Try to get the asset URI from different sources
222
+ let assetUri = latestVersion.assetUri || latestVersion.fallbackAssetUri;
223
+ // If no direct assetUri, look for the VSIX in the files array
224
+ if (!assetUri && latestVersion.files) {
225
+ const vsixFile = latestVersion.files.find(f => f.assetType === 'Microsoft.VisualStudio.Services.VSIXPackage');
226
+ if (vsixFile) {
227
+ // The source is the full download URL
228
+ return {
229
+ version: latestVersion.version,
230
+ assetUri: vsixFile.source.replace('/Microsoft.VisualStudio.Services.VSIXPackage', ''),
231
+ };
232
+ }
233
+ }
234
+ if (!assetUri) {
235
+ // Construct the download URL manually as fallback
236
+ assetUri = `https://ms-dynamics-smb.gallery.vsassets.io/_apis/public/gallery/publisher/ms-dynamics-smb/extension/al/${latestVersion.version}`;
237
+ }
238
+ return {
239
+ version: latestVersion.version,
240
+ assetUri: assetUri,
241
+ };
242
+ }
243
+ catch (error) {
244
+ this.logger.error('Failed to query marketplace:', error);
245
+ return null;
246
+ }
247
+ }
248
+ /**
249
+ * Download a file
250
+ */
251
+ async downloadFile(url, destPath) {
252
+ this.logger.debug(`Downloading: ${url}`);
253
+ const response = await axios_1.default.get(url, {
254
+ responseType: 'stream',
255
+ });
256
+ const writer = fs.createWriteStream(destPath);
257
+ response.data.pipe(writer);
258
+ return new Promise((resolve, reject) => {
259
+ writer.on('finish', resolve);
260
+ writer.on('error', reject);
261
+ });
262
+ }
263
+ /**
264
+ * Find EditorServices.Host executable in extension directory
265
+ */
266
+ findEditorServices(extensionPath) {
267
+ // Determine platform folder name
268
+ const platformFolder = process.platform === 'win32' ? 'win32'
269
+ : process.platform === 'darwin' ? 'darwin'
270
+ : 'linux';
271
+ // Platform-specific paths (AL extension 14.0+)
272
+ const possiblePaths = [
273
+ // New structure with platform folders
274
+ path.join(extensionPath, 'extension', 'bin', platformFolder, 'Microsoft.Dynamics.Nav.EditorServices.Host.exe'),
275
+ path.join(extensionPath, 'extension', 'bin', platformFolder, 'Microsoft.Dynamics.Nav.EditorServices.Host'),
276
+ // Legacy structure
277
+ path.join(extensionPath, 'extension', 'bin', 'EditorServices.Host.exe'),
278
+ path.join(extensionPath, 'extension', 'bin', 'EditorServices.Host'),
279
+ path.join(extensionPath, 'extension', 'bin', 'Roslyn', 'Microsoft.Dynamics.Nav.EditorServices.Host.exe'),
280
+ path.join(extensionPath, 'extension', 'bin', 'Roslyn', 'Microsoft.Dynamics.Nav.EditorServices.Host'),
281
+ // Direct extraction
282
+ path.join(extensionPath, 'bin', platformFolder, 'Microsoft.Dynamics.Nav.EditorServices.Host.exe'),
283
+ path.join(extensionPath, 'bin', platformFolder, 'Microsoft.Dynamics.Nav.EditorServices.Host'),
284
+ path.join(extensionPath, 'bin', 'EditorServices.Host.exe'),
285
+ path.join(extensionPath, 'bin', 'EditorServices.Host'),
286
+ ];
287
+ for (const p of possiblePaths) {
288
+ if (fs.existsSync(p)) {
289
+ this.logger.debug(`Found EditorServices at: ${p}`);
290
+ return p;
291
+ }
292
+ }
293
+ // Search recursively as fallback
294
+ return this.searchForEditorServices(extensionPath);
295
+ }
296
+ /**
297
+ * Recursively search for EditorServices executable
298
+ */
299
+ searchForEditorServices(dir, depth = 0) {
300
+ if (depth > 5)
301
+ return null; // Limit recursion depth
302
+ try {
303
+ const entries = fs.readdirSync(dir);
304
+ for (const entry of entries) {
305
+ const fullPath = path.join(dir, entry);
306
+ if (entry.includes('EditorServices.Host') && !entry.endsWith('.pdb')) {
307
+ return fullPath;
308
+ }
309
+ const stat = fs.statSync(fullPath);
310
+ if (stat.isDirectory()) {
311
+ const found = this.searchForEditorServices(fullPath, depth + 1);
312
+ if (found)
313
+ return found;
314
+ }
315
+ }
316
+ }
317
+ catch {
318
+ // Ignore access errors
319
+ }
320
+ return null;
321
+ }
322
+ /**
323
+ * List files recursively for debugging
324
+ */
325
+ listFilesRecursive(dir, maxDepth, depth = 0) {
326
+ if (depth >= maxDepth || !fs.existsSync(dir)) {
327
+ return [];
328
+ }
329
+ const results = [];
330
+ try {
331
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
332
+ for (const entry of entries) {
333
+ const fullPath = path.join(dir, entry.name);
334
+ results.push(entry.isDirectory() ? `${entry.name}/` : entry.name);
335
+ if (entry.isDirectory() && depth < maxDepth - 1) {
336
+ const subFiles = this.listFilesRecursive(fullPath, maxDepth, depth + 1);
337
+ results.push(...subFiles.map(f => ` ${f}`));
338
+ }
339
+ }
340
+ }
341
+ catch {
342
+ // Ignore errors
343
+ }
344
+ return results;
345
+ }
346
+ }
347
+ exports.ALExtensionManager = ALExtensionManager;
348
+ //# sourceMappingURL=extension-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-manager.js","sourceRoot":"","sources":["../../src/al/extension-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './extension-manager.js';
2
+ export * from './language-server.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/al/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./extension-manager.js"), exports);
18
+ __exportStar(require("./language-server.js"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/al/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,uDAAqC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * AL Language Server Client
3
+ *
4
+ * Communicates with the Microsoft AL Language Server via LSP protocol.
5
+ * Based on insights from Serena project's implementation.
6
+ */
7
+ import { SymbolInformation, Location, Hover, CompletionItem } from 'vscode-languageserver-protocol';
8
+ import { ALExtensionInfo } from '../config/types.js';
9
+ /**
10
+ * Symbol types in AL
11
+ */
12
+ export interface ALSymbol {
13
+ name: string;
14
+ kind: string;
15
+ range: {
16
+ start: {
17
+ line: number;
18
+ character: number;
19
+ };
20
+ end: {
21
+ line: number;
22
+ character: number;
23
+ };
24
+ };
25
+ uri?: string;
26
+ children?: ALSymbol[];
27
+ detail?: string;
28
+ }
29
+ /**
30
+ * AL Diagnostic
31
+ */
32
+ export interface ALDiagnostic {
33
+ message: string;
34
+ severity: 'error' | 'warning' | 'info' | 'hint';
35
+ range: {
36
+ start: {
37
+ line: number;
38
+ character: number;
39
+ };
40
+ end: {
41
+ line: number;
42
+ character: number;
43
+ };
44
+ };
45
+ code?: string | number;
46
+ source?: string;
47
+ }
48
+ /**
49
+ * AL Language Server Client
50
+ */
51
+ export declare class ALLanguageServer {
52
+ private extensionInfo;
53
+ private workspaceRoot;
54
+ private process;
55
+ private connection;
56
+ private logger;
57
+ private initialized;
58
+ private openDocuments;
59
+ private diagnosticsCache;
60
+ constructor(extensionInfo: ALExtensionInfo, workspaceRoot: string);
61
+ /**
62
+ * Initialize and start the language server
63
+ */
64
+ initialize(): Promise<void>;
65
+ /**
66
+ * Create initialization parameters for AL LSP
67
+ */
68
+ private createInitializeParams;
69
+ /**
70
+ * Handle diagnostics from the language server
71
+ */
72
+ private handleDiagnostics;
73
+ /**
74
+ * Map LSP severity to our severity type
75
+ */
76
+ private mapSeverity;
77
+ /**
78
+ * Open a document in the language server
79
+ */
80
+ openDocument(uri: string): Promise<void>;
81
+ /**
82
+ * Get document symbols
83
+ */
84
+ getDocumentSymbols(uri: string): Promise<ALSymbol[]>;
85
+ /**
86
+ * Go to definition
87
+ */
88
+ goToDefinition(uri: string, line: number, character: number): Promise<Location[]>;
89
+ /**
90
+ * Find references
91
+ */
92
+ findReferences(uri: string, line: number, character: number): Promise<Location[]>;
93
+ /**
94
+ * Get hover information
95
+ */
96
+ hover(uri: string, line: number, character: number): Promise<Hover | null>;
97
+ /**
98
+ * Get completions
99
+ */
100
+ getCompletions(uri: string, line: number, character: number): Promise<CompletionItem[]>;
101
+ /**
102
+ * Get diagnostics for a document
103
+ */
104
+ getDiagnostics(uri: string): Promise<ALDiagnostic[]>;
105
+ /**
106
+ * Get workspace symbols (search across all files)
107
+ */
108
+ getWorkspaceSymbols(query: string): Promise<SymbolInformation[]>;
109
+ /**
110
+ * Convert LSP symbols to our format
111
+ */
112
+ private convertSymbols;
113
+ /**
114
+ * Convert symbol kind number to string
115
+ */
116
+ private symbolKindToString;
117
+ /**
118
+ * Convert URI to file path
119
+ */
120
+ private uriToPath;
121
+ /**
122
+ * Convert file path to URI
123
+ */
124
+ pathToUri(filePath: string): string;
125
+ /**
126
+ * Ensure the server is initialized
127
+ */
128
+ private ensureInitialized;
129
+ /**
130
+ * Shutdown the language server
131
+ */
132
+ shutdown(): Promise<void>;
133
+ }
134
+ //# sourceMappingURL=language-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-server.d.ts","sourceRoot":"","sources":["../../src/al/language-server.ts"],"names":[],"mappings":"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"}