@lvce-editor/extension-host-worker 8.48.0 → 8.49.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.
Files changed (27) hide show
  1. package/dist/extension-api/index.js +53 -0
  2. package/dist/extension-api/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +2 -0
  3. package/dist/extension-api/parts/LanguageServer/LanguageServer.js +8 -0
  4. package/dist/extension-api/parts/LanguageServerOptions/LanguageServerOptions.js +0 -0
  5. package/dist/extension-api/parts/LanguageServerRegistry/LanguageServerRegistry.js +50 -0
  6. package/dist/extension-api/parts/LanguageServerRegistrySnapshot/LanguageServerRegistrySnapshot.js +0 -0
  7. package/dist/extension-api/parts/ViewRegistry/ViewRegistry.js +3 -0
  8. package/dist/extensionHostWorkerMain.js +160 -66
  9. package/extension-api/dist/index.d.ts +2 -0
  10. package/extension-api/dist/index.js +1 -0
  11. package/extension-api/dist/parts/CommandMap/CommandMap.d.ts +1 -0
  12. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.d.ts +1 -0
  13. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +2 -0
  14. package/extension-api/dist/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.d.ts +1 -0
  15. package/extension-api/dist/parts/LanguageServer/LanguageServer.d.ts +5 -0
  16. package/extension-api/dist/parts/LanguageServer/LanguageServer.js +3 -0
  17. package/extension-api/dist/parts/LanguageServerOptions/LanguageServerOptions.d.ts +6 -0
  18. package/extension-api/dist/parts/LanguageServerOptions/LanguageServerOptions.js +1 -0
  19. package/extension-api/dist/parts/LanguageServerRegistry/LanguageServerRegistry.d.ts +6 -0
  20. package/extension-api/dist/parts/LanguageServerRegistry/LanguageServerRegistry.js +45 -0
  21. package/extension-api/dist/parts/LanguageServerRegistrySnapshot/LanguageServerRegistrySnapshot.d.ts +4 -0
  22. package/extension-api/dist/parts/LanguageServerRegistrySnapshot/LanguageServerRegistrySnapshot.js +1 -0
  23. package/extension-api/dist/parts/View/View.d.ts +1 -0
  24. package/extension-api/dist/parts/ViewRegistry/ViewRegistry.js +5 -0
  25. package/extension-api/package.json +1 -1
  26. package/extension-api/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +1 -1
@@ -2024,6 +2024,52 @@ var resetLanguageProviderRegistry = () => {
2024
2024
  }
2025
2025
  };
2026
2026
 
2027
+ // packages/extension-api/src/parts/LanguageServerRegistry/LanguageServerRegistry.ts
2028
+ var languageServers = /* @__PURE__ */ Object.create(null);
2029
+ var assertNonEmptyString = (value, name) => {
2030
+ if (typeof value !== "string" || value.length === 0) {
2031
+ throw new ExtensionApiError(`language server is missing ${name}`);
2032
+ }
2033
+ };
2034
+ var validateLanguageServer = (options) => {
2035
+ if (!options) {
2036
+ throw new ExtensionApiError("language server is not defined");
2037
+ }
2038
+ assertNonEmptyString(options.id, "id");
2039
+ assertNonEmptyString(options.languageId, "languageId");
2040
+ assertNonEmptyString(options.uri, "uri");
2041
+ if (!Array.isArray(options.argv) || options.argv.some((argument) => typeof argument !== "string")) {
2042
+ throw new ExtensionApiError(`language server ${options.id} has invalid argv`);
2043
+ }
2044
+ if (options.id in languageServers) {
2045
+ throw new ExtensionApiError(`language server ${options.id} is already registered`);
2046
+ }
2047
+ };
2048
+ var registerLanguageServer = (options) => {
2049
+ validateLanguageServer(options);
2050
+ languageServers[options.id] = {
2051
+ argv: [...options.argv],
2052
+ id: options.id,
2053
+ languageId: options.languageId,
2054
+ uri: options.uri
2055
+ };
2056
+ return {
2057
+ dispose() {
2058
+ delete languageServers[options.id];
2059
+ }
2060
+ };
2061
+ };
2062
+ var getLanguageServerRegistrySnapshot = () => {
2063
+ return {
2064
+ languageServers: Object.values(languageServers)
2065
+ };
2066
+ };
2067
+ var resetLanguageServerRegistry = () => {
2068
+ for (const id2 of Object.keys(languageServers)) {
2069
+ delete languageServers[id2];
2070
+ }
2071
+ };
2072
+
2027
2073
  // packages/extension-api/src/parts/OutputChannel/OutputChannel.ts
2028
2074
  var outputChannels = /* @__PURE__ */ Object.create(null);
2029
2075
  var outputChannelLogs = /* @__PURE__ */ Object.create(null);
@@ -2534,6 +2580,9 @@ var assertEventListener = (viewId, listener, index) => {
2534
2580
  assertBoolean(eventListener.passive, `view ${viewId} event listener ${index} has invalid passive`);
2535
2581
  assertBoolean(eventListener.preventDefault, `view ${viewId} event listener ${index} has invalid preventDefault`);
2536
2582
  assertBoolean(eventListener.stopPropagation, `view ${viewId} event listener ${index} has invalid stopPropagation`);
2583
+ if (eventListener.trackPointerEvents !== void 0 && (!Array.isArray(eventListener.trackPointerEvents) || eventListener.trackPointerEvents.some((event) => typeof event !== "string" && typeof event !== "number"))) {
2584
+ throw new ExtensionApiError(`view ${viewId} event listener ${index} has invalid trackPointerEvents`);
2585
+ }
2537
2586
  };
2538
2587
  var assertEventListeners = (view) => {
2539
2588
  if (view.eventListeners === void 0) {
@@ -3029,6 +3078,7 @@ var commandMap = {
3029
3078
  "ExtensionApi.getDiagnosticProviderRegistrySnapshot": getDiagnosticProviderRegistrySnapshot,
3030
3079
  "ExtensionApi.getFormattingProviderRegistrySnapshot": getFormattingProviderRegistrySnapshot,
3031
3080
  "ExtensionApi.getHoverProviderRegistrySnapshot": getHoverProviderRegistrySnapshot,
3081
+ "ExtensionApi.getLanguageServerRegistrySnapshot": getLanguageServerRegistrySnapshot,
3032
3082
  "ExtensionApi.getOutputChannelRegistrySnapshot": getOutputChannelRegistrySnapshot,
3033
3083
  "ExtensionApi.getSourceControlProviderRegistrySnapshot": getSourceControlProviderRegistrySnapshot,
3034
3084
  "ExtensionApi.getStatusBarItems": getStatusBarItems,
@@ -3391,6 +3441,7 @@ export {
3391
3441
  getDiagnosticProviderRegistrySnapshot,
3392
3442
  getFormattingProviderRegistrySnapshot,
3393
3443
  getHoverProviderRegistrySnapshot,
3444
+ getLanguageServerRegistrySnapshot,
3394
3445
  getOutputChannelRegistrySnapshot,
3395
3446
  getPreference,
3396
3447
  getStatusBarItemProviderRegistrySnapshot,
@@ -3413,6 +3464,7 @@ export {
3413
3464
  registerFormattingProvider,
3414
3465
  registerHoverProvider,
3415
3466
  registerImplementationProvider,
3467
+ registerLanguageServer,
3416
3468
  registerReferenceProvider,
3417
3469
  registerRenameProvider,
3418
3470
  registerSelectionProvider,
@@ -3428,6 +3480,7 @@ export {
3428
3480
  resetFormattingProviderRegistry,
3429
3481
  resetHoverProviderRegistry,
3430
3482
  resetLanguageProviderRegistry,
3483
+ resetLanguageServerRegistry,
3431
3484
  resetOutputChannelRegistry,
3432
3485
  resetSourceControlProviderRegistry,
3433
3486
  resetStatusBarItemProviderRegistry,
@@ -5,6 +5,7 @@ import { executeFormattingProvider, getFormattingProviderRegistrySnapshot } from
5
5
  import { getStatusBarItems } from "../GetStatusBarItems/GetStatusBarItems.js";
6
6
  import { executeHoverProvider, getHoverProviderRegistrySnapshot } from "../Hover/Hover.js";
7
7
  import { executeLanguageProvider, executeOrganizeImportsProvider } from "../LanguageProvider/LanguageProvider.js";
8
+ import { getLanguageServerRegistrySnapshot } from "../LanguageServer/LanguageServer.js";
8
9
  import { getOutputChannelRegistrySnapshot } from "../OutputChannel/OutputChannel.js";
9
10
  import {
10
11
  executeSourceControlAcceptInput,
@@ -60,6 +61,7 @@ const commandMap = {
60
61
  "ExtensionApi.getDiagnosticProviderRegistrySnapshot": getDiagnosticProviderRegistrySnapshot,
61
62
  "ExtensionApi.getFormattingProviderRegistrySnapshot": getFormattingProviderRegistrySnapshot,
62
63
  "ExtensionApi.getHoverProviderRegistrySnapshot": getHoverProviderRegistrySnapshot,
64
+ "ExtensionApi.getLanguageServerRegistrySnapshot": getLanguageServerRegistrySnapshot,
63
65
  "ExtensionApi.getOutputChannelRegistrySnapshot": getOutputChannelRegistrySnapshot,
64
66
  "ExtensionApi.getSourceControlProviderRegistrySnapshot": getSourceControlProviderRegistrySnapshot,
65
67
  "ExtensionApi.getStatusBarItems": getStatusBarItems,
@@ -0,0 +1,8 @@
1
+ import { getLanguageServerRegistrySnapshot } from "../LanguageServerRegistry/LanguageServerRegistry.js";
2
+ import { registerLanguageServer } from "../LanguageServerRegistry/LanguageServerRegistry.js";
3
+ import { resetLanguageServerRegistry } from "../LanguageServerRegistry/LanguageServerRegistry.js";
4
+ export {
5
+ getLanguageServerRegistrySnapshot,
6
+ registerLanguageServer,
7
+ resetLanguageServerRegistry
8
+ };
@@ -0,0 +1,50 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ const languageServers = /* @__PURE__ */ Object.create(null);
3
+ const assertNonEmptyString = (value, name) => {
4
+ if (typeof value !== "string" || value.length === 0) {
5
+ throw new ExtensionApiError(`language server is missing ${name}`);
6
+ }
7
+ };
8
+ const validateLanguageServer = (options) => {
9
+ if (!options) {
10
+ throw new ExtensionApiError("language server is not defined");
11
+ }
12
+ assertNonEmptyString(options.id, "id");
13
+ assertNonEmptyString(options.languageId, "languageId");
14
+ assertNonEmptyString(options.uri, "uri");
15
+ if (!Array.isArray(options.argv) || options.argv.some((argument) => typeof argument !== "string")) {
16
+ throw new ExtensionApiError(`language server ${options.id} has invalid argv`);
17
+ }
18
+ if (options.id in languageServers) {
19
+ throw new ExtensionApiError(`language server ${options.id} is already registered`);
20
+ }
21
+ };
22
+ const registerLanguageServer = (options) => {
23
+ validateLanguageServer(options);
24
+ languageServers[options.id] = {
25
+ argv: [...options.argv],
26
+ id: options.id,
27
+ languageId: options.languageId,
28
+ uri: options.uri
29
+ };
30
+ return {
31
+ dispose() {
32
+ delete languageServers[options.id];
33
+ }
34
+ };
35
+ };
36
+ const getLanguageServerRegistrySnapshot = () => {
37
+ return {
38
+ languageServers: Object.values(languageServers)
39
+ };
40
+ };
41
+ const resetLanguageServerRegistry = () => {
42
+ for (const id of Object.keys(languageServers)) {
43
+ delete languageServers[id];
44
+ }
45
+ };
46
+ export {
47
+ getLanguageServerRegistrySnapshot,
48
+ registerLanguageServer,
49
+ resetLanguageServerRegistry
50
+ };
@@ -39,6 +39,9 @@ const assertEventListener = (viewId, listener, index) => {
39
39
  assertBoolean(eventListener.passive, `view ${viewId} event listener ${index} has invalid passive`);
40
40
  assertBoolean(eventListener.preventDefault, `view ${viewId} event listener ${index} has invalid preventDefault`);
41
41
  assertBoolean(eventListener.stopPropagation, `view ${viewId} event listener ${index} has invalid stopPropagation`);
42
+ if (eventListener.trackPointerEvents !== void 0 && (!Array.isArray(eventListener.trackPointerEvents) || eventListener.trackPointerEvents.some((event) => typeof event !== "string" && typeof event !== "number"))) {
43
+ throw new ExtensionApiError(`view ${viewId} event listener ${index} has invalid trackPointerEvents`);
44
+ }
42
45
  };
43
46
  const assertEventListeners = (view) => {
44
47
  if (view.eventListeners === void 0) {
@@ -666,7 +666,7 @@ const register$1 = commandMap => {
666
666
  const getCommand = key => {
667
667
  return commands[key];
668
668
  };
669
- const execute$1 = (command, ...args) => {
669
+ const execute$2 = (command, ...args) => {
670
670
  const fn = getCommand(command);
671
671
  if (!fn) {
672
672
  throw new CommandNotFoundError(command);
@@ -1086,7 +1086,7 @@ const logError = () => {
1086
1086
  };
1087
1087
  const handleMessage = event => {
1088
1088
  const actualRequiresSocket = event?.target?.requiresSocket || requiresSocket;
1089
- const actualExecute = event?.target?.execute || execute$1;
1089
+ const actualExecute = event?.target?.execute || execute$2;
1090
1090
  return handleJsonRpcMessage(event.target, event.data, actualExecute, event.target._resolve, preparePrettyError, logError, actualRequiresSocket);
1091
1091
  };
1092
1092
 
@@ -1630,14 +1630,14 @@ const hasLegacyProvider = (getProvider, textDocumentId) => {
1630
1630
  const executeLegacy = (executeProvider, textDocumentId, args) => {
1631
1631
  return executeProvider(textDocumentId, ...args);
1632
1632
  };
1633
- const isUnavailableError = error => {
1633
+ const isUnavailableError$1 = error => {
1634
1634
  return error instanceof Error && error.name === 'CommandNotFoundError' || error instanceof TypeError && error.message === "Cannot read properties of undefined (reading 'invoke')";
1635
1635
  };
1636
1636
  const invoke$3 = async (method, ...args) => {
1637
1637
  try {
1638
1638
  return await invoke$6(method, ...args);
1639
1639
  } catch (error) {
1640
- if (isUnavailableError(error)) {
1640
+ if (isUnavailableError$1(error)) {
1641
1641
  return {
1642
1642
  found: false
1643
1643
  };
@@ -1645,7 +1645,7 @@ const invoke$3 = async (method, ...args) => {
1645
1645
  throw error;
1646
1646
  }
1647
1647
  };
1648
- const execute = async (kind, methodName, textDocumentId, ...args) => {
1648
+ const execute$1 = async (kind, methodName, textDocumentId, ...args) => {
1649
1649
  const textDocument = get$a(textDocumentId);
1650
1650
  if (!textDocument) {
1651
1651
  return {
@@ -1932,7 +1932,7 @@ const executeBraceCompletionProvider = async (textDocumentId, ...args) => {
1932
1932
  if (hasLegacyProvider(getProvider$d, textDocumentId)) {
1933
1933
  return executeLegacy(executeLegacyBraceCompletionProvider, textDocumentId, args);
1934
1934
  }
1935
- const isolated = await execute('brace completion', 'provideBraceCompletion', textDocumentId, ...args);
1935
+ const isolated = await execute$1('brace completion', 'provideBraceCompletion', textDocumentId, ...args);
1936
1936
  return isolated.found ? isolated.result : executeLegacy(executeLegacyBraceCompletionProvider, textDocumentId, args);
1937
1937
  };
1938
1938
 
@@ -1952,7 +1952,7 @@ const executeClosingTagProvider = async (textDocumentId, ...args) => {
1952
1952
  if (hasLegacyProvider(getProvider$c, textDocumentId)) {
1953
1953
  return executeLegacy(executeLegacyClosingTagProvider, textDocumentId, args);
1954
1954
  }
1955
- const isolated = await execute('closing tag', 'provideClosingTag', textDocumentId, ...args);
1955
+ const isolated = await execute$1('closing tag', 'provideClosingTag', textDocumentId, ...args);
1956
1956
  return isolated.found ? isolated.result : executeLegacy(executeLegacyClosingTagProvider, textDocumentId, args);
1957
1957
  };
1958
1958
 
@@ -1970,7 +1970,7 @@ const {
1970
1970
  });
1971
1971
  const executeCodeActionProvider = async uid => {
1972
1972
  if (!hasLegacyProvider(getProvider$b, uid)) {
1973
- const isolated = await execute('code action', 'provideCodeActions', uid);
1973
+ const isolated = await execute$1('code action', 'provideCodeActions', uid);
1974
1974
  if (isolated.found) {
1975
1975
  return isolated.result;
1976
1976
  }
@@ -2085,7 +2085,7 @@ const executeCommentProvider = async (textDocumentId, ...args) => {
2085
2085
  if (hasLegacyProvider(getProvider$a, textDocumentId)) {
2086
2086
  return executeLegacy(executeLegacyCommentProvider, textDocumentId, args);
2087
2087
  }
2088
- const isolated = await execute('comment', 'provideComment', textDocumentId, ...args);
2088
+ const isolated = await execute$1('comment', 'provideComment', textDocumentId, ...args);
2089
2089
  return isolated.found ? isolated.result : executeLegacy(executeLegacyCommentProvider, textDocumentId, args);
2090
2090
  };
2091
2091
 
@@ -2339,7 +2339,7 @@ const executeDefinitionProvider = async (textDocumentId, ...args) => {
2339
2339
  if (hasLegacyProvider(getProvider$9, textDocumentId)) {
2340
2340
  return executeLegacy(executeLegacyDefinitionProvider, textDocumentId, args);
2341
2341
  }
2342
- const isolated = await execute('definition', 'provideDefinition', textDocumentId, ...args);
2342
+ const isolated = await execute$1('definition', 'provideDefinition', textDocumentId, ...args);
2343
2343
  return isolated.found ? isolated.result : executeLegacy(executeLegacyDefinitionProvider, textDocumentId, args);
2344
2344
  };
2345
2345
 
@@ -2617,7 +2617,7 @@ const executeImplementationProvider = async (textDocumentId, ...args) => {
2617
2617
  if (hasLegacyProvider(getProvider$7, textDocumentId)) {
2618
2618
  return executeLegacy(executeLegacyImplementationProvider, textDocumentId, args);
2619
2619
  }
2620
- const isolated = await execute('implementation', 'provideImplementations', textDocumentId, ...args);
2620
+ const isolated = await execute$1('implementation', 'provideImplementations', textDocumentId, ...args);
2621
2621
  return isolated.found ? isolated.result : executeLegacy(executeLegacyImplementationProvider, textDocumentId, args);
2622
2622
  };
2623
2623
 
@@ -2988,14 +2988,14 @@ const executeReferenceProvider = async (textDocumentId, ...args) => {
2988
2988
  if (hasLegacyProvider(getProvider$6, textDocumentId)) {
2989
2989
  return executeLegacy(executeLegacyReferenceProvider, textDocumentId, args);
2990
2990
  }
2991
- const isolated = await execute('reference', 'provideReferences', textDocumentId, ...args);
2991
+ const isolated = await execute$1('reference', 'provideReferences', textDocumentId, ...args);
2992
2992
  return isolated.found ? isolated.result : executeLegacy(executeLegacyReferenceProvider, textDocumentId, args);
2993
2993
  };
2994
2994
  const executefileReferenceProvider = async (textDocumentId, ...args) => {
2995
2995
  if (hasLegacyProvider(getProvider$6, textDocumentId)) {
2996
2996
  return executeLegacy(executeLegacyFileReferenceProvider, textDocumentId, args);
2997
2997
  }
2998
- const isolated = await execute('reference', 'provideFileReferences', textDocumentId, ...args);
2998
+ const isolated = await execute$1('reference', 'provideFileReferences', textDocumentId, ...args);
2999
2999
  return isolated.found ? isolated.result : executeLegacy(executeLegacyFileReferenceProvider, textDocumentId, args);
3000
3000
  };
3001
3001
  const executeReferenceProvider2 = async (uri, languageId, offset, position) => {
@@ -3072,14 +3072,14 @@ const executeRenameProvider = async (textDocumentId, ...args) => {
3072
3072
  if (hasLegacyProvider(getProvider$5, textDocumentId)) {
3073
3073
  return executeLegacy(executeLegacyRenameProvider, textDocumentId, args);
3074
3074
  }
3075
- const isolated = await execute('rename', 'provideRename', textDocumentId, ...args);
3075
+ const isolated = await execute$1('rename', 'provideRename', textDocumentId, ...args);
3076
3076
  return isolated.found ? isolated.result : executeLegacy(executeLegacyRenameProvider, textDocumentId, args);
3077
3077
  };
3078
3078
  const executeprepareRenameProvider = async (textDocumentId, ...args) => {
3079
3079
  if (hasLegacyProvider(getProvider$5, textDocumentId)) {
3080
3080
  return executeLegacy(executeLegacyPrepareRenameProvider, textDocumentId, args);
3081
3081
  }
3082
- const isolated = await execute('rename', 'prepareRename', textDocumentId, ...args);
3082
+ const isolated = await execute$1('rename', 'prepareRename', textDocumentId, ...args);
3083
3083
  return isolated.found ? isolated.result : executeLegacy(executeLegacyPrepareRenameProvider, textDocumentId, args);
3084
3084
  };
3085
3085
 
@@ -3240,10 +3240,36 @@ const executeSelectionProvider = async (textDocumentId, ...args) => {
3240
3240
  if (hasLegacyProvider(getProvider$4, textDocumentId)) {
3241
3241
  return executeLegacy(executeLegacySelectionProvider, textDocumentId, args);
3242
3242
  }
3243
- const isolated = await execute('selection', 'provideSelections', textDocumentId, ...args);
3243
+ const isolated = await execute$1('selection', 'provideSelections', textDocumentId, ...args);
3244
3244
  return isolated.found ? isolated.result : executeLegacy(executeLegacySelectionProvider, textDocumentId, args);
3245
3245
  };
3246
3246
 
3247
+ const isUnavailableError = error => {
3248
+ return error instanceof Error && error.name === 'CommandNotFoundError' || error instanceof TypeError && error.message === "Cannot read properties of undefined (reading 'invoke')";
3249
+ };
3250
+ const getEnabledProviderIds$1 = async (scheme, root) => {
3251
+ try {
3252
+ return await invoke$6('Extensions.getEnabledSourceControlProviderIds', scheme, root);
3253
+ } catch (error) {
3254
+ if (isUnavailableError(error)) {
3255
+ return [];
3256
+ }
3257
+ throw error;
3258
+ }
3259
+ };
3260
+ const execute = async (providerId, methodName, ...args) => {
3261
+ try {
3262
+ return await invoke$6('Extensions.executeSourceControlProvider', providerId, methodName, ...args);
3263
+ } catch (error) {
3264
+ if (isUnavailableError(error)) {
3265
+ return {
3266
+ found: false
3267
+ };
3268
+ }
3269
+ throw error;
3270
+ }
3271
+ };
3272
+
3247
3273
  const RE_PROTOCOL = /^([a-z-]+):\/\//;
3248
3274
  const getProtocol = uri => {
3249
3275
  const protocolMatch = uri.match(RE_PROTOCOL);
@@ -3395,24 +3421,43 @@ const getFilesFromProvider = provider => {
3395
3421
  return provider.getChangedFiles();
3396
3422
  };
3397
3423
  const getChangedFiles = async providerId => {
3398
- const provider = getProvider$3(providerId);
3399
- const changedFiles = await getFilesFromProvider(provider);
3400
- const flattenedChangedFiles = changedFiles;
3401
- return flattenedChangedFiles;
3424
+ const provider = state$8.providers[providerId];
3425
+ if (provider) {
3426
+ return getFilesFromProvider(provider);
3427
+ }
3428
+ const isolated = await execute(providerId, 'executeSourceControlGetChangedFiles');
3429
+ if (isolated.found) {
3430
+ return isolated.result;
3431
+ }
3432
+ return getFilesFromProvider(getProvider$3(providerId));
3402
3433
  };
3403
3434
  const getBadgeCount = async providerId => {
3404
- const provider = getProvider$3(providerId);
3405
- if (typeof provider.getBadgeCount === 'function') {
3406
- return provider.getBadgeCount();
3435
+ const provider = state$8.providers[providerId];
3436
+ if (provider) {
3437
+ if (typeof provider.getBadgeCount === 'function') {
3438
+ return provider.getBadgeCount();
3439
+ }
3440
+ const changedFiles = await getFilesFromProvider(provider);
3441
+ return changedFiles.length;
3442
+ }
3443
+ const isolated = await execute(providerId, 'executeSourceControlGetBadgeCount');
3444
+ if (isolated.found) {
3445
+ return isolated.result;
3407
3446
  }
3408
- const changedFiles = await getFilesFromProvider(provider);
3409
- return changedFiles.length;
3447
+ return getFilesFromProvider(getProvider$3(providerId));
3410
3448
  };
3411
3449
  const getFileBefore = async (providerId, uri) => {
3412
3450
  string(providerId);
3413
3451
  string(uri);
3414
- const provider = getProvider$3(providerId);
3415
- return provider.getFileBefore(uri);
3452
+ const provider = state$8.providers[providerId];
3453
+ if (provider) {
3454
+ return provider.getFileBefore(uri);
3455
+ }
3456
+ const isolated = await execute(providerId, 'executeSourceControlGetFileBefore', uri);
3457
+ if (isolated.found) {
3458
+ return isolated.result;
3459
+ }
3460
+ return getProvider$3(providerId).getFileBefore(uri);
3416
3461
  };
3417
3462
  const getGroupsFromProvider = async (provider, cwd) => {
3418
3463
  if (provider.getGroups) {
@@ -3430,51 +3475,100 @@ const getGroupsFromProvider = async (provider, cwd) => {
3430
3475
  throw new Error('source control provider is missing required function getGroups');
3431
3476
  };
3432
3477
  const getGroups = async (providerId, cwd) => {
3433
- const provider = getProvider$3(providerId);
3434
- const groups = await getGroupsFromProvider(provider, cwd);
3435
- return groups;
3478
+ const provider = state$8.providers[providerId];
3479
+ if (provider) {
3480
+ return getGroupsFromProvider(provider, cwd);
3481
+ }
3482
+ const isolated = await execute(providerId, 'executeSourceControlGetGroups', cwd);
3483
+ if (isolated.found) {
3484
+ return isolated.result;
3485
+ }
3486
+ return getGroupsFromProvider(getProvider$3(providerId), cwd);
3436
3487
  };
3437
3488
  const acceptInput = async (providerId, value) => {
3438
- const provider = getProvider$3(providerId);
3439
- await provider.acceptInput(value);
3489
+ const provider = state$8.providers[providerId];
3490
+ if (provider) {
3491
+ await provider.acceptInput(value);
3492
+ return;
3493
+ }
3494
+ const isolated = await execute(providerId, 'executeSourceControlAcceptInput', value);
3495
+ if (!isolated.found) {
3496
+ getProvider$3(providerId);
3497
+ }
3440
3498
  };
3441
3499
  const generateCommitMessage = async providerId => {
3442
- const provider = getProvider$3(providerId);
3443
- if (typeof provider.generateCommitMessage !== 'function') {
3444
- throw new TypeError('source control provider is missing required function generateCommitMessage');
3500
+ const provider = state$8.providers[providerId];
3501
+ if (provider) {
3502
+ if (typeof provider.generateCommitMessage !== 'function') {
3503
+ throw new TypeError('source control provider is missing required function generateCommitMessage');
3504
+ }
3505
+ return provider.generateCommitMessage();
3506
+ }
3507
+ const isolated = await execute(providerId, 'executeSourceControlGenerateCommitMessage');
3508
+ if (isolated.found) {
3509
+ return isolated.result;
3445
3510
  }
3446
- return provider.generateCommitMessage();
3511
+ return getProvider$3(providerId);
3447
3512
  };
3448
3513
  const getFeatures = async providerId => {
3449
- const provider = getProvider$3(providerId);
3450
- if (typeof provider.getFeatures === 'function') {
3451
- return provider.getFeatures();
3452
- }
3453
- if (provider.features && typeof provider.features === 'object') {
3454
- return provider.features;
3514
+ const provider = state$8.providers[providerId];
3515
+ if (provider) {
3516
+ if (typeof provider.getFeatures === 'function') {
3517
+ return provider.getFeatures();
3518
+ }
3519
+ if (provider.features && typeof provider.features === 'object') {
3520
+ return provider.features;
3521
+ }
3522
+ if ('showGenerateCommitMessageButton' in provider) {
3523
+ return {
3524
+ showGenerateCommitMessageButton: provider.showGenerateCommitMessageButton
3525
+ };
3526
+ }
3527
+ return {};
3455
3528
  }
3456
- if ('showGenerateCommitMessageButton' in provider) {
3457
- return {
3458
- showGenerateCommitMessageButton: provider.showGenerateCommitMessageButton
3459
- };
3529
+ const isolated = await execute(providerId, 'executeSourceControlGetFeatures');
3530
+ if (isolated.found) {
3531
+ return isolated.result;
3460
3532
  }
3461
- return {};
3533
+ return getProvider$3(providerId);
3462
3534
  };
3463
- const add = async path => {
3464
- const provider = Object.values(state$8.providers)[0];
3465
- if (!provider) {
3535
+ const add = async (providerId, path) => {
3536
+ if (path === undefined) {
3537
+ const provider = Object.values(state$8.providers)[0];
3538
+ if (provider) {
3539
+ // @ts-ignore
3540
+ await provider.add(providerId);
3541
+ }
3466
3542
  return;
3467
3543
  }
3468
- // @ts-ignore
3469
- await provider.add(path);
3544
+ const provider = state$8.providers[providerId];
3545
+ if (provider) {
3546
+ await provider.add(path);
3547
+ return;
3548
+ }
3549
+ const isolated = await execute(providerId, 'executeSourceControlAdd', path);
3550
+ if (!isolated.found) {
3551
+ getProvider$3(providerId);
3552
+ }
3470
3553
  };
3471
- const discard = async path => {
3472
- const provider = Object.values(state$8.providers)[0];
3473
- if (!provider) {
3554
+ const discard = async (providerId, path) => {
3555
+ if (path === undefined) {
3556
+ const provider = Object.values(state$8.providers)[0];
3557
+ if (provider) {
3558
+ // @ts-ignore
3559
+ await provider.discard(providerId);
3560
+ }
3474
3561
  return;
3475
3562
  }
3476
- // @ts-ignore
3477
- await provider.discard(path);
3563
+ const provider = state$8.providers[providerId];
3564
+ if (provider) {
3565
+ await provider.discard(path);
3566
+ return;
3567
+ }
3568
+ const isolated = await execute(providerId, 'executeSourceControlDiscard', path);
3569
+ if (!isolated.found) {
3570
+ getProvider$3(providerId);
3571
+ }
3478
3572
  };
3479
3573
  const getEnabledProviderIds = async (scheme, root) => {
3480
3574
  string(scheme);
@@ -3493,7 +3587,8 @@ const getEnabledProviderIds = async (scheme, root) => {
3493
3587
  enabledIds.push(provider.id);
3494
3588
  }
3495
3589
  }
3496
- return enabledIds;
3590
+ const isolatedIds = await getEnabledProviderIds$1(scheme, root);
3591
+ return [...new Set([...enabledIds, ...isolatedIds])];
3497
3592
  };
3498
3593
  const getIconDefinitions = async providerId => {
3499
3594
  const extensions = await getExtensions();
@@ -3514,13 +3609,12 @@ const getIconDefinitions = async providerId => {
3514
3609
  };
3515
3610
  const getFileDecorations = async (providerId, uris) => {
3516
3611
  const provider = state$8.providers[providerId];
3517
- // @ts-ignore
3518
- if (!provider || !provider.getFileDecorations) {
3519
- return [];
3612
+ if (provider) {
3613
+ // @ts-ignore
3614
+ return provider.getFileDecorations ? provider.getFileDecorations(uris) : [];
3520
3615
  }
3521
- // @ts-ignore
3522
- const decorations = await provider.getFileDecorations(uris);
3523
- return decorations;
3616
+ const isolated = await execute(providerId, 'executeSourceControlGetFileDecorations', uris);
3617
+ return isolated.found ? isolated.result : [];
3524
3618
  };
3525
3619
 
3526
3620
  const getStatusBarItems = async () => {
@@ -3654,7 +3748,7 @@ const executeTabCompletionProvider = async (textDocumentId, ...args) => {
3654
3748
  if (hasLegacyProvider(getProvider$2, textDocumentId)) {
3655
3749
  return executeLegacy(executeLegacyTabCompletionProvider, textDocumentId, args);
3656
3750
  }
3657
- const isolated = await execute('tab completion', 'provideTabCompletion', textDocumentId, ...args);
3751
+ const isolated = await execute$1('tab completion', 'provideTabCompletion', textDocumentId, ...args);
3658
3752
  return isolated.found ? isolated.result : executeLegacy(executeLegacyTabCompletionProvider, textDocumentId, args);
3659
3753
  };
3660
3754
 
@@ -3712,7 +3806,7 @@ const executeTypeDefinitionProvider = async (textDocumentId, ...args) => {
3712
3806
  if (hasLegacyProvider(getProvider$1, textDocumentId)) {
3713
3807
  return executeLegacy(executeLegacyTypeDefinitionProvider, textDocumentId, args);
3714
3808
  }
3715
- const isolated = await execute('type definition', 'provideTypeDefinition', textDocumentId, ...args);
3809
+ const isolated = await execute$1('type definition', 'provideTypeDefinition', textDocumentId, ...args);
3716
3810
  return isolated.found ? isolated.result : executeLegacy(executeLegacyTypeDefinitionProvider, textDocumentId, args);
3717
3811
  };
3718
3812
 
@@ -11,6 +11,7 @@ export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, regis
11
11
  export { exists, mkdir, readDirWithFileTypes, readFile, remove, stat, writeFile } from './parts/FileSystem/FileSystem.ts';
12
12
  export { confirm, getWorkspaceFolder, handleWorkspaceRefresh, openUri } from './parts/Host/Host.ts';
13
13
  export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from './parts/Hover/Hover.ts';
14
+ export { getLanguageServerRegistrySnapshot, registerLanguageServer, resetLanguageServerRegistry } from './parts/LanguageServer/LanguageServer.ts';
14
15
  export { registerBraceCompletionProvider, registerClosingTagProvider, registerCodeActionsProvider, registerCommentProvider, registerDefinitionProvider, registerImplementationProvider, registerReferenceProvider, registerRenameProvider, registerSelectionProvider, registerTabCompletionProvider, registerTypeDefinitionProvider, resetLanguageProviderRegistry, } from './parts/LanguageProvider/LanguageProvider.ts';
15
16
  export type { LanguageProvider } from './parts/LanguageProvider/LanguageProvider.ts';
16
17
  export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, registerSourceControlProvider, resetSourceControlProviderRegistry, } from './parts/SourceControl/SourceControl.ts';
@@ -31,6 +32,7 @@ export type { FormattingEdit, FormattingProvider, FormattingProviderRegistrySnap
31
32
  export type { FileSystemDirent } from './parts/FileSystem/FileSystem.ts';
32
33
  export type { HandleExtensionManagementMessagePortOptions } from './parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.ts';
33
34
  export type { HoverProvider, HoverProviderRegistrySnapshot, HoverResult, RegisteredHoverProvider } from './parts/Hover/Hover.ts';
35
+ export type { LanguageServerOptions, LanguageServerRegistrySnapshot } from './parts/LanguageServer/LanguageServer.ts';
34
36
  export type { OutputChannel } from './parts/OutputChannelHandle/OutputChannelHandle.ts';
35
37
  export type { OutputChannelRegistrySnapshot } from './parts/OutputChannelRegistrySnapshot/OutputChannelRegistrySnapshot.ts';
36
38
  export type { RegisteredOutputChannel } from './parts/RegisteredOutputChannel/RegisteredOutputChannel.ts';
@@ -11,6 +11,7 @@ export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, regis
11
11
  export { exists, mkdir, readDirWithFileTypes, readFile, remove, stat, writeFile } from "./parts/FileSystem/FileSystem.js";
12
12
  export { confirm, getWorkspaceFolder, handleWorkspaceRefresh, openUri } from "./parts/Host/Host.js";
13
13
  export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from "./parts/Hover/Hover.js";
14
+ export { getLanguageServerRegistrySnapshot, registerLanguageServer, resetLanguageServerRegistry } from "./parts/LanguageServer/LanguageServer.js";
14
15
  export { registerBraceCompletionProvider, registerClosingTagProvider, registerCodeActionsProvider, registerCommentProvider, registerDefinitionProvider, registerImplementationProvider, registerReferenceProvider, registerRenameProvider, registerSelectionProvider, registerTabCompletionProvider, registerTypeDefinitionProvider, resetLanguageProviderRegistry, } from "./parts/LanguageProvider/LanguageProvider.js";
15
16
  export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, registerSourceControlProvider, resetSourceControlProviderRegistry, } from "./parts/SourceControl/SourceControl.js";
16
17
  export { createViewInstance, dispatchViewEvent, disposeViewInstance, executeViewProvider, getViewRegistrySnapshot, renderViewInstance, registerView, resetViewRegistry, saveViewInstanceState, } from "./parts/ViewRegistry/ViewRegistry.js";
@@ -32,6 +32,7 @@ export declare const commandMap: {
32
32
  'ExtensionApi.getDiagnosticProviderRegistrySnapshot': () => import("../DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.ts").DiagnosticProviderRegistrySnapshot;
33
33
  'ExtensionApi.getFormattingProviderRegistrySnapshot': () => import("../FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.ts").FormattingProviderRegistrySnapshot;
34
34
  'ExtensionApi.getHoverProviderRegistrySnapshot': () => import("../HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.ts").HoverProviderRegistrySnapshot;
35
+ 'ExtensionApi.getLanguageServerRegistrySnapshot': () => import("../LanguageServerRegistrySnapshot/LanguageServerRegistrySnapshot.ts").LanguageServerRegistrySnapshot;
35
36
  'ExtensionApi.getOutputChannelRegistrySnapshot': () => import("../OutputChannelRegistrySnapshot/OutputChannelRegistrySnapshot.ts").OutputChannelRegistrySnapshot;
36
37
  'ExtensionApi.getSourceControlProviderRegistrySnapshot': () => import("../SourceControlProviderRegistrySnapshot/SourceControlProviderRegistrySnapshot.ts").SourceControlProviderRegistrySnapshot;
37
38
  'ExtensionApi.getStatusBarItems': () => readonly import("../StatusBarItem/StatusBarItem.ts").StatusBarItem[];
@@ -31,6 +31,7 @@ export declare const commandMap: {
31
31
  'ExtensionApi.getDiagnosticProviderRegistrySnapshot': () => import("../DiagnosticProviderRegistrySnapshot/DiagnosticProviderRegistrySnapshot.ts").DiagnosticProviderRegistrySnapshot;
32
32
  'ExtensionApi.getFormattingProviderRegistrySnapshot': () => import("../FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.ts").FormattingProviderRegistrySnapshot;
33
33
  'ExtensionApi.getHoverProviderRegistrySnapshot': () => import("../HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.ts").HoverProviderRegistrySnapshot;
34
+ 'ExtensionApi.getLanguageServerRegistrySnapshot': () => import("../LanguageServerRegistrySnapshot/LanguageServerRegistrySnapshot.ts").LanguageServerRegistrySnapshot;
34
35
  'ExtensionApi.getOutputChannelRegistrySnapshot': () => import("../OutputChannelRegistrySnapshot/OutputChannelRegistrySnapshot.ts").OutputChannelRegistrySnapshot;
35
36
  'ExtensionApi.getSourceControlProviderRegistrySnapshot': () => import("../SourceControlProviderRegistrySnapshot/SourceControlProviderRegistrySnapshot.ts").SourceControlProviderRegistrySnapshot;
36
37
  'ExtensionApi.getStatusBarItems': () => readonly import("../StatusBarItem/StatusBarItem.ts").StatusBarItem[];
@@ -5,6 +5,7 @@ import { executeFormattingProvider, getFormattingProviderRegistrySnapshot } from
5
5
  import { getStatusBarItems } from "../GetStatusBarItems/GetStatusBarItems.js";
6
6
  import { executeHoverProvider, getHoverProviderRegistrySnapshot } from "../Hover/Hover.js";
7
7
  import { executeLanguageProvider, executeOrganizeImportsProvider } from "../LanguageProvider/LanguageProvider.js";
8
+ import { getLanguageServerRegistrySnapshot } from "../LanguageServer/LanguageServer.js";
8
9
  import { getOutputChannelRegistrySnapshot } from "../OutputChannel/OutputChannel.js";
9
10
  import { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, getSourceControlProviderRegistrySnapshot, } from "../SourceControl/SourceControl.js";
10
11
  import { createViewInstance, dispatchViewEvent, disposeViewInstance, executeViewProvider, getViewActions, getViewMenuEntries, getViewRegistrySnapshot, renderViewInstance, saveViewInstanceState, } from "../ViewRegistry/ViewRegistry.js";
@@ -37,6 +38,7 @@ export const commandMap = {
37
38
  'ExtensionApi.getDiagnosticProviderRegistrySnapshot': getDiagnosticProviderRegistrySnapshot,
38
39
  'ExtensionApi.getFormattingProviderRegistrySnapshot': getFormattingProviderRegistrySnapshot,
39
40
  'ExtensionApi.getHoverProviderRegistrySnapshot': getHoverProviderRegistrySnapshot,
41
+ 'ExtensionApi.getLanguageServerRegistrySnapshot': getLanguageServerRegistrySnapshot,
40
42
  'ExtensionApi.getOutputChannelRegistrySnapshot': getOutputChannelRegistrySnapshot,
41
43
  'ExtensionApi.getSourceControlProviderRegistrySnapshot': getSourceControlProviderRegistrySnapshot,
42
44
  'ExtensionApi.getStatusBarItems': getStatusBarItems,