@lvce-editor/extension-management-worker 4.27.0 → 4.28.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.
|
@@ -2328,6 +2328,73 @@ const executeExtensionCommand = async (extensionsState, id, ...args) => {
|
|
|
2328
2328
|
};
|
|
2329
2329
|
};
|
|
2330
2330
|
|
|
2331
|
+
const hasUriScheme = value => {
|
|
2332
|
+
return /^[a-z][a-z\d+.-]*:/i.test(value);
|
|
2333
|
+
};
|
|
2334
|
+
const toExtensionBaseUri = extensionPath => {
|
|
2335
|
+
if (hasUriScheme(extensionPath)) {
|
|
2336
|
+
return extensionPath.endsWith('/') ? extensionPath : `${extensionPath}/`;
|
|
2337
|
+
}
|
|
2338
|
+
if (extensionPath.startsWith('/')) {
|
|
2339
|
+
return `file://${extensionPath}/`;
|
|
2340
|
+
}
|
|
2341
|
+
throw new Error(`Language server extension path must be an absolute path or URI`);
|
|
2342
|
+
};
|
|
2343
|
+
const resolveLanguageServerUri = (extension, languageServerUri) => {
|
|
2344
|
+
if (languageServerUri.startsWith('/')) {
|
|
2345
|
+
return `file://${languageServerUri}`;
|
|
2346
|
+
}
|
|
2347
|
+
if (hasUriScheme(languageServerUri)) {
|
|
2348
|
+
return languageServerUri;
|
|
2349
|
+
}
|
|
2350
|
+
const extensionPath = extension.uri || extension.path || '';
|
|
2351
|
+
return new URL(languageServerUri, toExtensionBaseUri(extensionPath)).href;
|
|
2352
|
+
};
|
|
2353
|
+
const getContribution = (extension, languageId) => {
|
|
2354
|
+
return extension.languageServers?.find(contribution => contribution.languageId === languageId);
|
|
2355
|
+
};
|
|
2356
|
+
const getRegisteredLanguageServer = (snapshot, contribution, languageId) => {
|
|
2357
|
+
const languageServer = snapshot.languageServers.find(registered => registered.id === contribution.id && registered.languageId === languageId);
|
|
2358
|
+
if (!languageServer) {
|
|
2359
|
+
throw new Error(`language server ${contribution.id || '<unknown>'} is contributed in extension.json but not registered`);
|
|
2360
|
+
}
|
|
2361
|
+
return languageServer;
|
|
2362
|
+
};
|
|
2363
|
+
const sanitizeCompletionItem = item => {
|
|
2364
|
+
if (!item || typeof item !== 'object' || typeof item.label !== 'string') {
|
|
2365
|
+
return undefined;
|
|
2366
|
+
}
|
|
2367
|
+
const snippet = item.insertText || item.textEdit?.newText || item.label;
|
|
2368
|
+
return {
|
|
2369
|
+
...item,
|
|
2370
|
+
flags: 0,
|
|
2371
|
+
kind: typeof item.kind === 'number' ? item.kind : 0,
|
|
2372
|
+
label: item.label,
|
|
2373
|
+
matches: [],
|
|
2374
|
+
snippet
|
|
2375
|
+
};
|
|
2376
|
+
};
|
|
2377
|
+
const executeLanguageServerCompletion = async (rpc, extension, textDocument, offset) => {
|
|
2378
|
+
if (typeof textDocument.text !== 'string' || typeof textDocument.uri !== 'string') {
|
|
2379
|
+
return [];
|
|
2380
|
+
}
|
|
2381
|
+
const contribution = getContribution(extension, textDocument.languageId);
|
|
2382
|
+
if (!contribution) {
|
|
2383
|
+
return [];
|
|
2384
|
+
}
|
|
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
|
+
return result.map(sanitizeCompletionItem).filter(item => item !== undefined);
|
|
2396
|
+
};
|
|
2397
|
+
|
|
2331
2398
|
const getOrigin = () => {
|
|
2332
2399
|
return globalThis.location?.origin || 'http://localhost';
|
|
2333
2400
|
};
|
|
@@ -2353,13 +2420,23 @@ const getRpc$1 = async (extension, assetDir, platform) => {
|
|
|
2353
2420
|
const contributesCompletionProvider = (extension, languageId) => {
|
|
2354
2421
|
return Array.isArray(extension.completionProviders) && extension.completionProviders.some(provider => provider.languageId === languageId);
|
|
2355
2422
|
};
|
|
2356
|
-
const
|
|
2423
|
+
const contributesLanguageServer = (extension, languageId) => {
|
|
2424
|
+
return Array.isArray(extension.languageServers) && extension.languageServers.some(languageServer => languageServer.languageId === languageId);
|
|
2425
|
+
};
|
|
2426
|
+
const getMatchingExtensions$5 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2357
2427
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2358
|
-
return extensions.filter(extension => isExtensionIsolated(extension) && contributesCompletionProvider(extension, textDocument.languageId));
|
|
2428
|
+
return extensions.filter(extension => isExtensionIsolated(extension) && (contributesCompletionProvider(extension, textDocument.languageId) || contributesLanguageServer(extension, textDocument.languageId)));
|
|
2359
2429
|
};
|
|
2360
2430
|
const executeRpcCompletionProvider = async (rpc, textDocument, args) => {
|
|
2361
2431
|
return rpc.invoke('ExtensionApi.executeCompletionProvider', textDocument, ...args);
|
|
2362
2432
|
};
|
|
2433
|
+
const executeExtensionCompletionProvider = async (rpc, extension, textDocument, args) => {
|
|
2434
|
+
if (contributesLanguageServer(extension, textDocument.languageId)) {
|
|
2435
|
+
const offset = typeof args[0] === 'number' ? args[0] : 0;
|
|
2436
|
+
return executeLanguageServerCompletion(rpc, extension, textDocument, offset);
|
|
2437
|
+
}
|
|
2438
|
+
return executeRpcCompletionProvider(rpc, textDocument, args);
|
|
2439
|
+
};
|
|
2363
2440
|
const executeRpcResolveCompletionItemProvider = async (rpc, textDocument, args) => {
|
|
2364
2441
|
return rpc.invoke('ExtensionApi.executeResolveCompletionItemProvider', textDocument, ...args);
|
|
2365
2442
|
};
|
|
@@ -2368,9 +2445,9 @@ const executeCompletionProvider = async (extensionsState, textDocument, ...args)
|
|
|
2368
2445
|
assetDir,
|
|
2369
2446
|
platform
|
|
2370
2447
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2371
|
-
const extensions = await getMatchingExtensions$
|
|
2448
|
+
const extensions = await getMatchingExtensions$5(extensionsState, textDocument, assetDir, platform);
|
|
2372
2449
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2373
|
-
const results = await Promise.all(rpcs.map(rpc =>
|
|
2450
|
+
const results = await Promise.all(rpcs.map((rpc, index) => executeExtensionCompletionProvider(rpc, extensions[index], textDocument, args)));
|
|
2374
2451
|
return results[0] || [];
|
|
2375
2452
|
};
|
|
2376
2453
|
const executeResolveCompletionItemProvider = async (extensionsState, textDocument, ...args) => {
|
|
@@ -2378,7 +2455,8 @@ const executeResolveCompletionItemProvider = async (extensionsState, textDocumen
|
|
|
2378
2455
|
assetDir,
|
|
2379
2456
|
platform
|
|
2380
2457
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2381
|
-
const
|
|
2458
|
+
const matchingExtensions = await getMatchingExtensions$5(extensionsState, textDocument, assetDir, platform);
|
|
2459
|
+
const extensions = matchingExtensions.filter(extension => contributesCompletionProvider(extension, textDocument.languageId));
|
|
2382
2460
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2383
2461
|
const results = await Promise.all(rpcs.map(rpc => executeRpcResolveCompletionItemProvider(rpc, textDocument, args)));
|
|
2384
2462
|
return results[0];
|
|
@@ -2389,7 +2467,7 @@ const executeResolveCompletionItemProvider = async (extensionsState, textDocumen
|
|
|
2389
2467
|
const contributesDiagnosticProvider = (extension, languageId) => {
|
|
2390
2468
|
return Array.isArray(extension.diagnosticProviders) && extension.diagnosticProviders.some(provider => provider.languageId === languageId);
|
|
2391
2469
|
};
|
|
2392
|
-
const getMatchingExtensions$
|
|
2470
|
+
const getMatchingExtensions$4 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2393
2471
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2394
2472
|
return extensions.filter(extension => isExtensionIsolated(extension) && contributesDiagnosticProvider(extension, textDocument.languageId));
|
|
2395
2473
|
};
|
|
@@ -2401,7 +2479,7 @@ const executeDiagnosticProvider = async (extensionsState, textDocument, ...args)
|
|
|
2401
2479
|
assetDir,
|
|
2402
2480
|
platform
|
|
2403
2481
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2404
|
-
const extensions = await getMatchingExtensions$
|
|
2482
|
+
const extensions = await getMatchingExtensions$4(extensionsState, textDocument, assetDir, platform);
|
|
2405
2483
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2406
2484
|
const results = await Promise.all(rpcs.map(rpc => executeRpcDiagnosticProvider(rpc, textDocument, args)));
|
|
2407
2485
|
return results.flat();
|
|
@@ -2412,7 +2490,7 @@ const executeDiagnosticProvider = async (extensionsState, textDocument, ...args)
|
|
|
2412
2490
|
const contributesFormattingProvider = (extension, languageId) => {
|
|
2413
2491
|
return Array.isArray(extension.formattingProviders) && extension.formattingProviders.some(provider => provider.languageId === languageId);
|
|
2414
2492
|
};
|
|
2415
|
-
const getMatchingExtensions$
|
|
2493
|
+
const getMatchingExtensions$3 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2416
2494
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2417
2495
|
return extensions.filter(extension => isExtensionIsolated(extension) && contributesFormattingProvider(extension, textDocument.languageId));
|
|
2418
2496
|
};
|
|
@@ -2424,7 +2502,7 @@ const executeFormattingProvider = async (extensionsState, textDocument, ...args)
|
|
|
2424
2502
|
assetDir,
|
|
2425
2503
|
platform
|
|
2426
2504
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2427
|
-
const extensions = await getMatchingExtensions$
|
|
2505
|
+
const extensions = await getMatchingExtensions$3(extensionsState, textDocument, assetDir, platform);
|
|
2428
2506
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2429
2507
|
const results = await Promise.all(rpcs.map(rpc => executeRpcFormattingProvider(rpc, textDocument, args)));
|
|
2430
2508
|
return results[0] || [];
|
|
@@ -2435,7 +2513,7 @@ const executeFormattingProvider = async (extensionsState, textDocument, ...args)
|
|
|
2435
2513
|
const contributesHoverProvider = (extension, languageId) => {
|
|
2436
2514
|
return Array.isArray(extension.hoverProviders) && extension.hoverProviders.some(provider => provider.languageId === languageId);
|
|
2437
2515
|
};
|
|
2438
|
-
const getMatchingExtensions$
|
|
2516
|
+
const getMatchingExtensions$2 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2439
2517
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2440
2518
|
return extensions.filter(extension => isExtensionIsolated(extension) && contributesHoverProvider(extension, textDocument.languageId));
|
|
2441
2519
|
};
|
|
@@ -2447,7 +2525,7 @@ const executeHoverProvider = async (extensionsState, textDocument, ...args) => {
|
|
|
2447
2525
|
assetDir,
|
|
2448
2526
|
platform
|
|
2449
2527
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2450
|
-
const extensions = await getMatchingExtensions$
|
|
2528
|
+
const extensions = await getMatchingExtensions$2(extensionsState, textDocument, assetDir, platform);
|
|
2451
2529
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2452
2530
|
const results = await Promise.all(rpcs.map(rpc => executeRpcHoverProvider(rpc, textDocument, args)));
|
|
2453
2531
|
return results[0];
|
|
@@ -2469,7 +2547,7 @@ const contributesLanguageProvider = (extension, kind, languageId) => {
|
|
|
2469
2547
|
const activationEvent = activationEventByKind[kind] || 'onLanguage';
|
|
2470
2548
|
return Array.isArray(extension.activation) && extension.activation.includes(`${activationEvent}:${languageId}`);
|
|
2471
2549
|
};
|
|
2472
|
-
const getMatchingExtensions = async (extensionsState, kind, textDocument, assetDir, platform) => {
|
|
2550
|
+
const getMatchingExtensions$1 = async (extensionsState, kind, textDocument, assetDir, platform) => {
|
|
2473
2551
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2474
2552
|
return extensions.filter(extension => isExtensionIsolated(extension) && contributesLanguageProvider(extension, kind, textDocument.languageId));
|
|
2475
2553
|
};
|
|
@@ -2481,7 +2559,7 @@ const executeLanguageProvider = async (extensionsState, kind, methodName, textDo
|
|
|
2481
2559
|
assetDir,
|
|
2482
2560
|
platform
|
|
2483
2561
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2484
|
-
const extensions = await getMatchingExtensions(extensionsState, kind, textDocument, assetDir, platform);
|
|
2562
|
+
const extensions = await getMatchingExtensions$1(extensionsState, kind, textDocument, assetDir, platform);
|
|
2485
2563
|
if (extensions.length === 0) {
|
|
2486
2564
|
return {
|
|
2487
2565
|
found: false
|
|
@@ -2499,7 +2577,7 @@ const executeOrganizeImportsProvider = async (extensionsState, textDocument) =>
|
|
|
2499
2577
|
assetDir,
|
|
2500
2578
|
platform
|
|
2501
2579
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2502
|
-
const extensions = await getMatchingExtensions(extensionsState, 'code action', textDocument, assetDir, platform);
|
|
2580
|
+
const extensions = await getMatchingExtensions$1(extensionsState, 'code action', textDocument, assetDir, platform);
|
|
2503
2581
|
if (extensions.length === 0) {
|
|
2504
2582
|
return {
|
|
2505
2583
|
found: false
|
|
@@ -2513,6 +2591,61 @@ const executeOrganizeImportsProvider = async (extensionsState, textDocument) =>
|
|
|
2513
2591
|
};
|
|
2514
2592
|
};
|
|
2515
2593
|
|
|
2594
|
+
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
2595
|
+
|
|
2596
|
+
const getProviderIds = extension => {
|
|
2597
|
+
if (!Array.isArray(extension.sourceControlProviders)) {
|
|
2598
|
+
return [];
|
|
2599
|
+
}
|
|
2600
|
+
return extension.sourceControlProviders.map(provider => provider.id).filter(id => typeof id === 'string');
|
|
2601
|
+
};
|
|
2602
|
+
const getMatchingExtensions = async (extensionsState, assetDir, platform) => {
|
|
2603
|
+
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2604
|
+
return extensions.filter(extension => !extension.disabled && isExtensionIsolated(extension) && getProviderIds(extension).length > 0);
|
|
2605
|
+
};
|
|
2606
|
+
const findExtension = (extensions, providerId) => {
|
|
2607
|
+
return extensions.find(extension => getProviderIds(extension).includes(providerId));
|
|
2608
|
+
};
|
|
2609
|
+
const isProviderActive = async (rpc, providerId, scheme, root) => {
|
|
2610
|
+
return rpc.invoke('ExtensionApi.executeSourceControlIsActive', providerId, scheme, root);
|
|
2611
|
+
};
|
|
2612
|
+
const getEnabledSourceControlProviderIds = async (extensionsState, scheme, root) => {
|
|
2613
|
+
const {
|
|
2614
|
+
assetDir,
|
|
2615
|
+
platform
|
|
2616
|
+
} = await getRuntimeContext('', extensionsState.platform);
|
|
2617
|
+
const extensions = await getMatchingExtensions(extensionsState, assetDir, platform);
|
|
2618
|
+
const enabledProviderIds = [];
|
|
2619
|
+
for (const extension of extensions) {
|
|
2620
|
+
const rpc = await getRpc$1(extension, assetDir, platform);
|
|
2621
|
+
for (const providerId of getProviderIds(extension)) {
|
|
2622
|
+
if (await isProviderActive(rpc, providerId, scheme, root)) {
|
|
2623
|
+
enabledProviderIds.push(providerId);
|
|
2624
|
+
}
|
|
2625
|
+
}
|
|
2626
|
+
}
|
|
2627
|
+
return enabledProviderIds;
|
|
2628
|
+
};
|
|
2629
|
+
const executeSourceControlProvider = async (extensionsState, providerId, methodName, ...args) => {
|
|
2630
|
+
const {
|
|
2631
|
+
assetDir,
|
|
2632
|
+
platform
|
|
2633
|
+
} = await getRuntimeContext('', extensionsState.platform);
|
|
2634
|
+
const extensions = await getMatchingExtensions(extensionsState, assetDir, platform);
|
|
2635
|
+
const extension = findExtension(extensions, providerId);
|
|
2636
|
+
if (!extension) {
|
|
2637
|
+
return {
|
|
2638
|
+
found: false
|
|
2639
|
+
};
|
|
2640
|
+
}
|
|
2641
|
+
const rpc = await getRpc$1(extension, assetDir, platform);
|
|
2642
|
+
const result = await rpc.invoke(`ExtensionApi.${methodName}`, providerId, ...args);
|
|
2643
|
+
return {
|
|
2644
|
+
found: true,
|
|
2645
|
+
result
|
|
2646
|
+
};
|
|
2647
|
+
};
|
|
2648
|
+
|
|
2516
2649
|
const readFile = uri => {
|
|
2517
2650
|
return readFile$1(uri);
|
|
2518
2651
|
};
|
|
@@ -3330,6 +3463,7 @@ const commandMap = {
|
|
|
3330
3463
|
'Extensions.executeLanguageProvider': wrapCommand(executeLanguageProvider),
|
|
3331
3464
|
'Extensions.executeOrganizeImportsProvider': wrapCommand(executeOrganizeImportsProvider),
|
|
3332
3465
|
'Extensions.executeResolveCompletionItemProvider': wrapCommand(executeResolveCompletionItemProvider),
|
|
3466
|
+
'Extensions.executeSourceControlProvider': wrapCommand(executeSourceControlProvider),
|
|
3333
3467
|
'Extensions.getAccessToken': getAccessToken,
|
|
3334
3468
|
'Extensions.getAllExtensions': getAllExtensions,
|
|
3335
3469
|
'Extensions.getColorThemeCss': getColorThemeCss,
|
|
@@ -3337,6 +3471,7 @@ const commandMap = {
|
|
|
3337
3471
|
'Extensions.getColorThemeJson': getColorThemeJson,
|
|
3338
3472
|
'Extensions.getColorThemeNames': getColorThemeNames,
|
|
3339
3473
|
'Extensions.getDynamicWebExtensions': getDynamicWebExtensions,
|
|
3474
|
+
'Extensions.getEnabledSourceControlProviderIds': wrapCommand(getEnabledSourceControlProviderIds),
|
|
3340
3475
|
'Extensions.getExtension': getExtension,
|
|
3341
3476
|
'Extensions.getKeyBindings': getKeyBindings,
|
|
3342
3477
|
'Extensions.getLanguages': getLanguages,
|