@lvce-editor/extension-management-worker 4.28.1 → 4.30.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.
|
@@ -2328,6 +2328,11 @@ const executeExtensionCommand = async (extensionsState, id, ...args) => {
|
|
|
2328
2328
|
};
|
|
2329
2329
|
};
|
|
2330
2330
|
|
|
2331
|
+
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
2332
|
+
const warn = (...args) => {
|
|
2333
|
+
console.warn(...args);
|
|
2334
|
+
};
|
|
2335
|
+
|
|
2331
2336
|
const hasUriScheme = value => {
|
|
2332
2337
|
return /^[a-z][a-z\d+.-]*:/i.test(value);
|
|
2333
2338
|
};
|
|
@@ -2350,16 +2355,23 @@ const resolveLanguageServerUri = (extension, languageServerUri) => {
|
|
|
2350
2355
|
const extensionPath = extension.uri || extension.path || '';
|
|
2351
2356
|
return new URL(languageServerUri, toExtensionBaseUri(extensionPath)).href;
|
|
2352
2357
|
};
|
|
2353
|
-
const
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2358
|
+
const resolveLanguageServer = async (rpc, extension, languageId) => {
|
|
2359
|
+
const contribution = extension.languageServers?.find(item => item.languageId === languageId);
|
|
2360
|
+
if (!contribution) {
|
|
2361
|
+
return undefined;
|
|
2362
|
+
}
|
|
2363
|
+
const snapshot = await rpc.invoke('ExtensionApi.getLanguageServerRegistrySnapshot');
|
|
2357
2364
|
const languageServer = snapshot.languageServers.find(registered => registered.id === contribution.id && registered.languageId === languageId);
|
|
2358
2365
|
if (!languageServer) {
|
|
2359
2366
|
throw new Error(`language server ${contribution.id || '<unknown>'} is contributed in extension.json but not registered`);
|
|
2360
2367
|
}
|
|
2361
|
-
return
|
|
2368
|
+
return {
|
|
2369
|
+
argv: languageServer.argv,
|
|
2370
|
+
id: `${extension.id || extension.uri || extension.path || 'extension'}.${languageServer.id}`,
|
|
2371
|
+
uri: resolveLanguageServerUri(extension, languageServer.uri)
|
|
2372
|
+
};
|
|
2362
2373
|
};
|
|
2374
|
+
|
|
2363
2375
|
const sanitizeCompletionItem = item => {
|
|
2364
2376
|
if (!item || typeof item !== 'object' || typeof item.label !== 'string') {
|
|
2365
2377
|
return undefined;
|
|
@@ -2378,20 +2390,24 @@ const executeLanguageServerCompletion = async (rpc, extension, textDocument, off
|
|
|
2378
2390
|
if (typeof textDocument.text !== 'string' || typeof textDocument.uri !== 'string') {
|
|
2379
2391
|
return [];
|
|
2380
2392
|
}
|
|
2381
|
-
const
|
|
2382
|
-
if (!
|
|
2393
|
+
const languageServer = await resolveLanguageServer(rpc, extension, textDocument.languageId);
|
|
2394
|
+
if (!languageServer) {
|
|
2395
|
+
return [];
|
|
2396
|
+
}
|
|
2397
|
+
let result;
|
|
2398
|
+
try {
|
|
2399
|
+
result = await invoke$1('LanguageServer.complete', {
|
|
2400
|
+
argv: languageServer.argv,
|
|
2401
|
+
id: languageServer.id,
|
|
2402
|
+
offset,
|
|
2403
|
+
textDocument,
|
|
2404
|
+
uri: languageServer.uri
|
|
2405
|
+
});
|
|
2406
|
+
} catch (error) {
|
|
2407
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
2408
|
+
warn(`[Language Server] Completion failed: ${message}`);
|
|
2383
2409
|
return [];
|
|
2384
2410
|
}
|
|
2385
|
-
const snapshot = await rpc.invoke('ExtensionApi.getLanguageServerRegistrySnapshot');
|
|
2386
|
-
const languageServer = getRegisteredLanguageServer(snapshot, contribution, textDocument.languageId);
|
|
2387
|
-
const uri = resolveLanguageServerUri(extension, languageServer.uri);
|
|
2388
|
-
const result = await invoke$1('LanguageServer.complete', {
|
|
2389
|
-
argv: languageServer.argv,
|
|
2390
|
-
id: `${extension.id || extension.uri || extension.path || 'extension'}.${languageServer.id}`,
|
|
2391
|
-
offset,
|
|
2392
|
-
textDocument,
|
|
2393
|
-
uri
|
|
2394
|
-
});
|
|
2395
2411
|
return result.map(sanitizeCompletionItem).filter(item => item !== undefined);
|
|
2396
2412
|
};
|
|
2397
2413
|
|
|
@@ -2420,18 +2436,18 @@ const getRpc$1 = async (extension, assetDir, platform) => {
|
|
|
2420
2436
|
const contributesCompletionProvider = (extension, languageId) => {
|
|
2421
2437
|
return Array.isArray(extension.completionProviders) && extension.completionProviders.some(provider => provider.languageId === languageId);
|
|
2422
2438
|
};
|
|
2423
|
-
const contributesLanguageServer = (extension, languageId) => {
|
|
2439
|
+
const contributesLanguageServer$1 = (extension, languageId) => {
|
|
2424
2440
|
return Array.isArray(extension.languageServers) && extension.languageServers.some(languageServer => languageServer.languageId === languageId);
|
|
2425
2441
|
};
|
|
2426
2442
|
const getMatchingExtensions$5 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2427
2443
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2428
|
-
return extensions.filter(extension => isExtensionIsolated(extension) && (contributesCompletionProvider(extension, textDocument.languageId) || contributesLanguageServer(extension, textDocument.languageId)));
|
|
2444
|
+
return extensions.filter(extension => isExtensionIsolated(extension) && (contributesCompletionProvider(extension, textDocument.languageId) || contributesLanguageServer$1(extension, textDocument.languageId)));
|
|
2429
2445
|
};
|
|
2430
2446
|
const executeRpcCompletionProvider = async (rpc, textDocument, args) => {
|
|
2431
2447
|
return rpc.invoke('ExtensionApi.executeCompletionProvider', textDocument, ...args);
|
|
2432
2448
|
};
|
|
2433
2449
|
const executeExtensionCompletionProvider = async (rpc, extension, textDocument, args) => {
|
|
2434
|
-
if (contributesLanguageServer(extension, textDocument.languageId)) {
|
|
2450
|
+
if (contributesLanguageServer$1(extension, textDocument.languageId)) {
|
|
2435
2451
|
const offset = typeof args[0] === 'number' ? args[0] : 0;
|
|
2436
2452
|
return executeLanguageServerCompletion(rpc, extension, textDocument, offset);
|
|
2437
2453
|
}
|
|
@@ -2462,18 +2478,62 @@ const executeResolveCompletionItemProvider = async (extensionsState, textDocumen
|
|
|
2462
2478
|
return results[0];
|
|
2463
2479
|
};
|
|
2464
2480
|
|
|
2481
|
+
const sanitizeDiagnostic = diagnostic => {
|
|
2482
|
+
const start = diagnostic?.range?.start;
|
|
2483
|
+
const end = diagnostic?.range?.end;
|
|
2484
|
+
if (typeof diagnostic?.message !== 'string' || typeof start?.line !== 'number' || typeof start.character !== 'number' || typeof end?.line !== 'number' || typeof end.character !== 'number') {
|
|
2485
|
+
return undefined;
|
|
2486
|
+
}
|
|
2487
|
+
return {
|
|
2488
|
+
columnIndex: start.character,
|
|
2489
|
+
endColumnIndex: end.character,
|
|
2490
|
+
endRowIndex: end.line,
|
|
2491
|
+
message: diagnostic.message,
|
|
2492
|
+
rowIndex: start.line,
|
|
2493
|
+
...(typeof diagnostic.source === 'string' && {
|
|
2494
|
+
source: diagnostic.source
|
|
2495
|
+
}),
|
|
2496
|
+
type: diagnostic.severity === 1 ? 'error' : 'warning'
|
|
2497
|
+
};
|
|
2498
|
+
};
|
|
2499
|
+
const executeLanguageServerDiagnostic = async (rpc, extension, textDocument) => {
|
|
2500
|
+
if (typeof textDocument.text !== 'string' || typeof textDocument.uri !== 'string') {
|
|
2501
|
+
return [];
|
|
2502
|
+
}
|
|
2503
|
+
const languageServer = await resolveLanguageServer(rpc, extension, textDocument.languageId);
|
|
2504
|
+
if (!languageServer) {
|
|
2505
|
+
return [];
|
|
2506
|
+
}
|
|
2507
|
+
const result = await invoke$1('LanguageServer.diagnostic', {
|
|
2508
|
+
argv: languageServer.argv,
|
|
2509
|
+
id: languageServer.id,
|
|
2510
|
+
textDocument,
|
|
2511
|
+
uri: languageServer.uri
|
|
2512
|
+
});
|
|
2513
|
+
return result.map(sanitizeDiagnostic).filter(diagnostic => diagnostic !== undefined);
|
|
2514
|
+
};
|
|
2515
|
+
|
|
2465
2516
|
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
2466
2517
|
|
|
2467
2518
|
const contributesDiagnosticProvider = (extension, languageId) => {
|
|
2468
2519
|
return Array.isArray(extension.diagnosticProviders) && extension.diagnosticProviders.some(provider => provider.languageId === languageId);
|
|
2469
2520
|
};
|
|
2521
|
+
const contributesLanguageServer = (extension, languageId) => {
|
|
2522
|
+
return Array.isArray(extension.languageServers) && extension.languageServers.some(languageServer => languageServer.languageId === languageId);
|
|
2523
|
+
};
|
|
2470
2524
|
const getMatchingExtensions$4 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2471
2525
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2472
|
-
return extensions.filter(extension => isExtensionIsolated(extension) && contributesDiagnosticProvider(extension, textDocument.languageId));
|
|
2526
|
+
return extensions.filter(extension => isExtensionIsolated(extension) && (contributesDiagnosticProvider(extension, textDocument.languageId) || contributesLanguageServer(extension, textDocument.languageId)));
|
|
2473
2527
|
};
|
|
2474
2528
|
const executeRpcDiagnosticProvider = async (rpc, textDocument, args) => {
|
|
2475
2529
|
return rpc.invoke('ExtensionApi.executeDiagnosticProvider', textDocument, ...args);
|
|
2476
2530
|
};
|
|
2531
|
+
const executeExtensionDiagnosticProvider = async (rpc, extension, textDocument, args) => {
|
|
2532
|
+
if (contributesLanguageServer(extension, textDocument.languageId)) {
|
|
2533
|
+
return executeLanguageServerDiagnostic(rpc, extension, textDocument);
|
|
2534
|
+
}
|
|
2535
|
+
return executeRpcDiagnosticProvider(rpc, textDocument, args);
|
|
2536
|
+
};
|
|
2477
2537
|
const executeDiagnosticProvider = async (extensionsState, textDocument, ...args) => {
|
|
2478
2538
|
const {
|
|
2479
2539
|
assetDir,
|
|
@@ -2481,7 +2541,7 @@ const executeDiagnosticProvider = async (extensionsState, textDocument, ...args)
|
|
|
2481
2541
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2482
2542
|
const extensions = await getMatchingExtensions$4(extensionsState, textDocument, assetDir, platform);
|
|
2483
2543
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2484
|
-
const results = await Promise.all(rpcs.map(rpc =>
|
|
2544
|
+
const results = await Promise.all(rpcs.map((rpc, index) => executeExtensionDiagnosticProvider(rpc, extensions[index], textDocument, args)));
|
|
2485
2545
|
return results.flat();
|
|
2486
2546
|
};
|
|
2487
2547
|
|
|
@@ -2794,11 +2854,6 @@ const getAccessToken = () => {
|
|
|
2794
2854
|
return invoke$6('Auth.getAccessToken');
|
|
2795
2855
|
};
|
|
2796
2856
|
|
|
2797
|
-
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
2798
|
-
const warn = (...args) => {
|
|
2799
|
-
console.warn(...args);
|
|
2800
|
-
};
|
|
2801
|
-
|
|
2802
2857
|
const transparent = (color, factor) => {
|
|
2803
2858
|
return color;
|
|
2804
2859
|
};
|
|
@@ -3243,6 +3298,8 @@ const toView = (extension, registeredView, assetDir, platform) => {
|
|
|
3243
3298
|
const id = registeredView.id || '';
|
|
3244
3299
|
const manifestView = getManifestView(extension, id);
|
|
3245
3300
|
const css = getCss(extension, manifestView, assetDir, platform);
|
|
3301
|
+
const selector = Array.isArray(manifestView?.selector) ? manifestView.selector.filter(item => typeof item === 'string') : undefined;
|
|
3302
|
+
const type = typeof manifestView?.type === 'string' ? manifestView.type : undefined;
|
|
3246
3303
|
return {
|
|
3247
3304
|
...(css && {
|
|
3248
3305
|
css
|
|
@@ -3250,6 +3307,12 @@ const toView = (extension, registeredView, assetDir, platform) => {
|
|
|
3250
3307
|
...(registeredView.eventListeners && {
|
|
3251
3308
|
eventListeners: registeredView.eventListeners
|
|
3252
3309
|
}),
|
|
3310
|
+
...(selector && {
|
|
3311
|
+
selector
|
|
3312
|
+
}),
|
|
3313
|
+
...(type && {
|
|
3314
|
+
type
|
|
3315
|
+
}),
|
|
3253
3316
|
extensionId: getExtensionId$1(extension),
|
|
3254
3317
|
icon: getIcon(extension, manifestView, registeredView, assetDir, platform),
|
|
3255
3318
|
id,
|