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.
- package/CHANGELOG.md +54 -0
- package/LICENSE +22 -0
- package/README.md +234 -0
- package/dist/al/extension-manager.d.ts +52 -0
- package/dist/al/extension-manager.d.ts.map +1 -0
- package/dist/al/extension-manager.js +348 -0
- package/dist/al/extension-manager.js.map +1 -0
- package/dist/al/index.d.ts +3 -0
- package/dist/al/index.d.ts.map +1 -0
- package/dist/al/index.js +19 -0
- package/dist/al/index.js.map +1 -0
- package/dist/al/language-server.d.ts +134 -0
- package/dist/al/language-server.d.ts.map +1 -0
- package/dist/al/language-server.js +431 -0
- package/dist/al/language-server.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +207 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud/index.d.ts +2 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +18 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/relay-client.d.ts +84 -0
- package/dist/cloud/relay-client.d.ts.map +1 -0
- package/dist/cloud/relay-client.js +211 -0
- package/dist/cloud/relay-client.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +19 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +20 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +136 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +51 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +33 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +18 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +33 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +98 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/router/index.d.ts +2 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +18 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/tool-router.d.ts +87 -0
- package/dist/router/tool-router.d.ts.map +1 -0
- package/dist/router/tool-router.js +557 -0
- package/dist/router/tool-router.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +99 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/security.d.ts +66 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +358 -0
- package/dist/utils/security.js.map +1 -0
- package/mcp.json +125 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/al/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
|
package/dist/al/index.js
ADDED
|
@@ -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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"}
|