@lvce-editor/extension-host-worker 8.17.0 → 8.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/extension-api/index.js +62 -0
  2. package/dist/extension-api/parts/ExecuteHoverProvider/ExecuteHoverProvider.js +4 -0
  3. package/dist/extension-api/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +3 -0
  4. package/dist/extension-api/parts/GetHoverProviderRegistrySnapshot/GetHoverProviderRegistrySnapshot.js +4 -0
  5. package/dist/extension-api/parts/Hover/Hover.js +10 -0
  6. package/dist/extension-api/parts/HoverProvider/HoverProvider.js +0 -0
  7. package/dist/extension-api/parts/HoverProviderRegistry/HoverProviderRegistry.js +64 -0
  8. package/dist/extension-api/parts/HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.js +0 -0
  9. package/dist/extension-api/parts/HoverResult/HoverResult.js +0 -0
  10. package/dist/extension-api/parts/HoverTextDocument/HoverTextDocument.js +0 -0
  11. package/dist/extension-api/parts/RegisterHoverProvider/RegisterHoverProvider.js +4 -0
  12. package/dist/extension-api/parts/RegisteredHoverProvider/RegisteredHoverProvider.js +0 -0
  13. package/dist/extension-api/parts/ResetHoverProviderRegistry/ResetHoverProviderRegistry.js +4 -0
  14. package/dist/extensionHostWorkerMain.js +31 -4
  15. package/extension-api/LICENSE +21 -0
  16. package/extension-api/README.md +23 -0
  17. package/extension-api/dist/index.d.ts +20 -0
  18. package/extension-api/dist/index.js +9 -0
  19. package/extension-api/dist/parts/Activation/Activation.d.ts +1 -0
  20. package/extension-api/dist/parts/Activation/Activation.js +10 -0
  21. package/extension-api/dist/parts/AssertCompletionProvider/AssertCompletionProvider.d.ts +2 -0
  22. package/extension-api/dist/parts/AssertCompletionProvider/AssertCompletionProvider.js +22 -0
  23. package/extension-api/dist/parts/AssertFormattingProvider/AssertFormattingProvider.d.ts +2 -0
  24. package/extension-api/dist/parts/AssertFormattingProvider/AssertFormattingProvider.js +19 -0
  25. package/extension-api/dist/parts/AssertStatusBarItemProvider/AssertStatusBarItemProvider.d.ts +2 -0
  26. package/extension-api/dist/parts/AssertStatusBarItemProvider/AssertStatusBarItemProvider.js +16 -0
  27. package/extension-api/dist/parts/Command/Command.d.ts +5 -0
  28. package/extension-api/dist/parts/Command/Command.js +1 -0
  29. package/extension-api/dist/parts/CommandCallback/CommandCallback.d.ts +1 -0
  30. package/extension-api/dist/parts/CommandCallback/CommandCallback.js +1 -0
  31. package/extension-api/dist/parts/CommandMap/CommandMap.d.ts +13 -0
  32. package/extension-api/dist/parts/CommandMap/CommandMap.js +11 -0
  33. package/extension-api/dist/parts/CommandRegistry/CommandRegistry.d.ts +7 -0
  34. package/extension-api/dist/parts/CommandRegistry/CommandRegistry.js +47 -0
  35. package/extension-api/dist/parts/CommandRegistrySnapshot/CommandRegistrySnapshot.d.ts +4 -0
  36. package/extension-api/dist/parts/CommandRegistrySnapshot/CommandRegistrySnapshot.js +1 -0
  37. package/extension-api/dist/parts/Completion/Completion.d.ts +9 -0
  38. package/extension-api/dist/parts/Completion/Completion.js +4 -0
  39. package/extension-api/dist/parts/CompletionItem/CompletionItem.d.ts +3 -0
  40. package/extension-api/dist/parts/CompletionItem/CompletionItem.js +1 -0
  41. package/extension-api/dist/parts/CompletionProvider/CompletionProvider.d.ts +8 -0
  42. package/extension-api/dist/parts/CompletionProvider/CompletionProvider.js +1 -0
  43. package/extension-api/dist/parts/CompletionProviderRegistry/CompletionProviderRegistry.d.ts +13 -0
  44. package/extension-api/dist/parts/CompletionProviderRegistry/CompletionProviderRegistry.js +66 -0
  45. package/extension-api/dist/parts/CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.d.ts +4 -0
  46. package/extension-api/dist/parts/CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.js +1 -0
  47. package/extension-api/dist/parts/CompletionProviderState/CompletionProviderState.d.ts +1 -0
  48. package/extension-api/dist/parts/CompletionProviderState/CompletionProviderState.js +1 -0
  49. package/extension-api/dist/parts/CompletionTextDocument/CompletionTextDocument.d.ts +6 -0
  50. package/extension-api/dist/parts/CompletionTextDocument/CompletionTextDocument.js +1 -0
  51. package/extension-api/dist/parts/Disposable/Disposable.d.ts +3 -0
  52. package/extension-api/dist/parts/Disposable/Disposable.js +1 -0
  53. package/extension-api/dist/parts/ExecuteCommand/ExecuteCommand.d.ts +1 -0
  54. package/extension-api/dist/parts/ExecuteCommand/ExecuteCommand.js +4 -0
  55. package/extension-api/dist/parts/ExecuteCompletionProvider/ExecuteCompletionProvider.d.ts +1 -0
  56. package/extension-api/dist/parts/ExecuteCompletionProvider/ExecuteCompletionProvider.js +1 -0
  57. package/extension-api/dist/parts/ExecuteFormattingProvider/ExecuteFormattingProvider.d.ts +1 -0
  58. package/extension-api/dist/parts/ExecuteFormattingProvider/ExecuteFormattingProvider.js +1 -0
  59. package/extension-api/dist/parts/ExecuteHoverProvider/ExecuteHoverProvider.d.ts +1 -0
  60. package/extension-api/dist/parts/ExecuteHoverProvider/ExecuteHoverProvider.js +1 -0
  61. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.d.ts +12 -0
  62. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +17 -0
  63. package/extension-api/dist/parts/ExtensionApiError/ExtensionApiError.d.ts +3 -0
  64. package/extension-api/dist/parts/ExtensionApiError/ExtensionApiError.js +6 -0
  65. package/extension-api/dist/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.d.ts +14 -0
  66. package/extension-api/dist/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.js +12 -0
  67. package/extension-api/dist/parts/ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.d.ts +1 -0
  68. package/extension-api/dist/parts/ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.js +18 -0
  69. package/extension-api/dist/parts/ExtensionApiWorkerListen/ExtensionApiWorkerListen.d.ts +2 -0
  70. package/extension-api/dist/parts/ExtensionApiWorkerListen/ExtensionApiWorkerListen.js +8 -0
  71. package/extension-api/dist/parts/Formatting/Formatting.d.ts +9 -0
  72. package/extension-api/dist/parts/Formatting/Formatting.js +4 -0
  73. package/extension-api/dist/parts/FormattingEdit/FormattingEdit.d.ts +5 -0
  74. package/extension-api/dist/parts/FormattingEdit/FormattingEdit.js +1 -0
  75. package/extension-api/dist/parts/FormattingProvider/FormattingProvider.d.ts +7 -0
  76. package/extension-api/dist/parts/FormattingProvider/FormattingProvider.js +1 -0
  77. package/extension-api/dist/parts/FormattingProviderRegistry/FormattingProviderRegistry.d.ts +12 -0
  78. package/extension-api/dist/parts/FormattingProviderRegistry/FormattingProviderRegistry.js +34 -0
  79. package/extension-api/dist/parts/FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.d.ts +4 -0
  80. package/extension-api/dist/parts/FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.js +1 -0
  81. package/extension-api/dist/parts/FormattingProviderState/FormattingProviderState.d.ts +1 -0
  82. package/extension-api/dist/parts/FormattingProviderState/FormattingProviderState.js +1 -0
  83. package/extension-api/dist/parts/FormattingTextDocument/FormattingTextDocument.d.ts +6 -0
  84. package/extension-api/dist/parts/FormattingTextDocument/FormattingTextDocument.js +1 -0
  85. package/extension-api/dist/parts/GetCompletionProviderRegistrySnapshot/GetCompletionProviderRegistrySnapshot.d.ts +1 -0
  86. package/extension-api/dist/parts/GetCompletionProviderRegistrySnapshot/GetCompletionProviderRegistrySnapshot.js +1 -0
  87. package/extension-api/dist/parts/GetFormattingProviderRegistrySnapshot/GetFormattingProviderRegistrySnapshot.d.ts +1 -0
  88. package/extension-api/dist/parts/GetFormattingProviderRegistrySnapshot/GetFormattingProviderRegistrySnapshot.js +1 -0
  89. package/extension-api/dist/parts/GetHoverProviderRegistrySnapshot/GetHoverProviderRegistrySnapshot.d.ts +1 -0
  90. package/extension-api/dist/parts/GetHoverProviderRegistrySnapshot/GetHoverProviderRegistrySnapshot.js +1 -0
  91. package/extension-api/dist/parts/GetStatusBarItemProviderRegistrySnapshot/GetStatusBarItemProviderRegistrySnapshot.d.ts +1 -0
  92. package/extension-api/dist/parts/GetStatusBarItemProviderRegistrySnapshot/GetStatusBarItemProviderRegistrySnapshot.js +1 -0
  93. package/extension-api/dist/parts/GetStatusBarItems/GetStatusBarItems.d.ts +1 -0
  94. package/extension-api/dist/parts/GetStatusBarItems/GetStatusBarItems.js +1 -0
  95. package/extension-api/dist/parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.d.ts +9 -0
  96. package/extension-api/dist/parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.js +10 -0
  97. package/extension-api/dist/parts/Hover/Hover.d.ts +9 -0
  98. package/extension-api/dist/parts/Hover/Hover.js +4 -0
  99. package/extension-api/dist/parts/HoverProvider/HoverProvider.d.ts +7 -0
  100. package/extension-api/dist/parts/HoverProvider/HoverProvider.js +1 -0
  101. package/extension-api/dist/parts/HoverProviderRegistry/HoverProviderRegistry.d.ts +12 -0
  102. package/extension-api/dist/parts/HoverProviderRegistry/HoverProviderRegistry.js +56 -0
  103. package/extension-api/dist/parts/HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.d.ts +4 -0
  104. package/extension-api/dist/parts/HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.js +1 -0
  105. package/extension-api/dist/parts/HoverResult/HoverResult.d.ts +6 -0
  106. package/extension-api/dist/parts/HoverResult/HoverResult.js +1 -0
  107. package/extension-api/dist/parts/HoverTextDocument/HoverTextDocument.d.ts +6 -0
  108. package/extension-api/dist/parts/HoverTextDocument/HoverTextDocument.js +1 -0
  109. package/extension-api/dist/parts/NotifyStatusBarChange/NotifyStatusBarChange.d.ts +1 -0
  110. package/extension-api/dist/parts/NotifyStatusBarChange/NotifyStatusBarChange.js +4 -0
  111. package/extension-api/dist/parts/ProviderRegistry/ProviderRegistry.d.ts +21 -0
  112. package/extension-api/dist/parts/ProviderRegistry/ProviderRegistry.js +86 -0
  113. package/extension-api/dist/parts/QuickPick/QuickPick.d.ts +2 -0
  114. package/extension-api/dist/parts/QuickPick/QuickPick.js +4 -0
  115. package/extension-api/dist/parts/QuickPickItem/QuickPickItem.d.ts +5 -0
  116. package/extension-api/dist/parts/QuickPickItem/QuickPickItem.js +1 -0
  117. package/extension-api/dist/parts/RegisterCompletionProvider/RegisterCompletionProvider.d.ts +1 -0
  118. package/extension-api/dist/parts/RegisterCompletionProvider/RegisterCompletionProvider.js +1 -0
  119. package/extension-api/dist/parts/RegisterFormattingProvider/RegisterFormattingProvider.d.ts +1 -0
  120. package/extension-api/dist/parts/RegisterFormattingProvider/RegisterFormattingProvider.js +1 -0
  121. package/extension-api/dist/parts/RegisterHoverProvider/RegisterHoverProvider.d.ts +1 -0
  122. package/extension-api/dist/parts/RegisterHoverProvider/RegisterHoverProvider.js +1 -0
  123. package/extension-api/dist/parts/RegisterStatusBarItemProvider/RegisterStatusBarItemProvider.d.ts +1 -0
  124. package/extension-api/dist/parts/RegisterStatusBarItemProvider/RegisterStatusBarItemProvider.js +1 -0
  125. package/extension-api/dist/parts/RegisteredCommand/RegisteredCommand.d.ts +4 -0
  126. package/extension-api/dist/parts/RegisteredCommand/RegisteredCommand.js +1 -0
  127. package/extension-api/dist/parts/RegisteredCompletionProvider/RegisteredCompletionProvider.d.ts +8 -0
  128. package/extension-api/dist/parts/RegisteredCompletionProvider/RegisteredCompletionProvider.js +1 -0
  129. package/extension-api/dist/parts/RegisteredFormattingProvider/RegisteredFormattingProvider.d.ts +7 -0
  130. package/extension-api/dist/parts/RegisteredFormattingProvider/RegisteredFormattingProvider.js +1 -0
  131. package/extension-api/dist/parts/RegisteredHoverProvider/RegisteredHoverProvider.d.ts +7 -0
  132. package/extension-api/dist/parts/RegisteredHoverProvider/RegisteredHoverProvider.js +1 -0
  133. package/extension-api/dist/parts/RegisteredStatusBarItemProvider/RegisteredStatusBarItemProvider.d.ts +5 -0
  134. package/extension-api/dist/parts/RegisteredStatusBarItemProvider/RegisteredStatusBarItemProvider.js +1 -0
  135. package/extension-api/dist/parts/ResetCompletionProviderRegistry/ResetCompletionProviderRegistry.d.ts +1 -0
  136. package/extension-api/dist/parts/ResetCompletionProviderRegistry/ResetCompletionProviderRegistry.js +1 -0
  137. package/extension-api/dist/parts/ResetFormattingProviderRegistry/ResetFormattingProviderRegistry.d.ts +1 -0
  138. package/extension-api/dist/parts/ResetFormattingProviderRegistry/ResetFormattingProviderRegistry.js +1 -0
  139. package/extension-api/dist/parts/ResetHoverProviderRegistry/ResetHoverProviderRegistry.d.ts +1 -0
  140. package/extension-api/dist/parts/ResetHoverProviderRegistry/ResetHoverProviderRegistry.js +1 -0
  141. package/extension-api/dist/parts/ResetStatusBarItemProviderRegistry/ResetStatusBarItemProviderRegistry.d.ts +1 -0
  142. package/extension-api/dist/parts/ResetStatusBarItemProviderRegistry/ResetStatusBarItemProviderRegistry.js +1 -0
  143. package/extension-api/dist/parts/Rpc/Rpc.d.ts +3 -0
  144. package/extension-api/dist/parts/Rpc/Rpc.js +10 -0
  145. package/extension-api/dist/parts/ShowQuickPickOptions/ShowQuickPickOptions.d.ts +5 -0
  146. package/extension-api/dist/parts/ShowQuickPickOptions/ShowQuickPickOptions.js +1 -0
  147. package/extension-api/dist/parts/StatusBar/StatusBar.d.ts +8 -0
  148. package/extension-api/dist/parts/StatusBar/StatusBar.js +3 -0
  149. package/extension-api/dist/parts/StatusBarItem/StatusBarItem.d.ts +7 -0
  150. package/extension-api/dist/parts/StatusBarItem/StatusBarItem.js +1 -0
  151. package/extension-api/dist/parts/StatusBarItemProvider/StatusBarItemProvider.d.ts +5 -0
  152. package/extension-api/dist/parts/StatusBarItemProvider/StatusBarItemProvider.js +1 -0
  153. package/extension-api/dist/parts/StatusBarItemProviderHandle/StatusBarItemProviderHandle.d.ts +4 -0
  154. package/extension-api/dist/parts/StatusBarItemProviderHandle/StatusBarItemProviderHandle.js +1 -0
  155. package/extension-api/dist/parts/StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.d.ts +11 -0
  156. package/extension-api/dist/parts/StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.js +44 -0
  157. package/extension-api/dist/parts/StatusBarItemProviderRegistrySnapshot/StatusBarItemProviderRegistrySnapshot.d.ts +4 -0
  158. package/extension-api/dist/parts/StatusBarItemProviderRegistrySnapshot/StatusBarItemProviderRegistrySnapshot.js +1 -0
  159. package/extension-api/dist/parts/StatusBarItemProviderState/StatusBarItemProviderState.d.ts +1 -0
  160. package/extension-api/dist/parts/StatusBarItemProviderState/StatusBarItemProviderState.js +1 -0
  161. package/extension-api/package.json +32 -0
  162. package/extension-api/tsconfig.tsbuildinfo +1 -0
  163. package/package.json +1 -1
@@ -1244,15 +1244,73 @@ var getStatusBarItemProviderRegistrySnapshot = () => {
1244
1244
  };
1245
1245
  var resetStatusBarItemProviderRegistry = registry3.reset;
1246
1246
 
1247
+ // packages/extension-api/src/parts/HoverProviderRegistry/HoverProviderRegistry.ts
1248
+ var getType2 = (value) => {
1249
+ if (value === null) {
1250
+ return "null";
1251
+ }
1252
+ if (typeof value === "string") {
1253
+ return JSON.stringify(value);
1254
+ }
1255
+ if (Array.isArray(value)) {
1256
+ return "array";
1257
+ }
1258
+ return typeof value;
1259
+ };
1260
+ var validateHoverResult = (hover) => {
1261
+ if (hover === void 0) {
1262
+ return void 0;
1263
+ }
1264
+ if (!hover || typeof hover !== "object" || Array.isArray(hover)) {
1265
+ throw new ExtensionApiError(`invalid hover result: hover must be of type object or undefined but is ${getType2(hover)}`);
1266
+ }
1267
+ return hover;
1268
+ };
1269
+ var registry4 = createProviderRegistry({
1270
+ mapProvider(provider) {
1271
+ return {
1272
+ id: provider.id,
1273
+ languageId: provider.languageId,
1274
+ provideHover(textDocument, offset, ...args) {
1275
+ return provider.provideHover(textDocument, offset, ...args);
1276
+ }
1277
+ };
1278
+ },
1279
+ providerName: "hover provider",
1280
+ requiredMethods: ["provideHover"],
1281
+ requireLanguageId: true
1282
+ });
1283
+ var hasHoverProvider = registry4.hasProvider;
1284
+ var registerHoverProvider = (provider) => {
1285
+ const registeredProvider = registry4.registerProvider(provider);
1286
+ return {
1287
+ dispose() {
1288
+ registry4.deleteProvider(registeredProvider.id);
1289
+ }
1290
+ };
1291
+ };
1292
+ var executeHoverProvider = async (textDocument, offset, ...args) => {
1293
+ return registry4.executeProviderByLanguageId(textDocument.languageId, "provideHover", [textDocument, offset, ...args], validateHoverResult);
1294
+ };
1295
+ var getHoverProviders = registry4.getProviders;
1296
+ var getHoverProviderRegistrySnapshot = () => {
1297
+ return {
1298
+ providers: registry4.getProviders()
1299
+ };
1300
+ };
1301
+ var resetHoverProviderRegistry = registry4.reset;
1302
+
1247
1303
  // packages/extension-api/src/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.ts
1248
1304
  var commandMap = {
1249
1305
  "ExtensionApi.executeCommand": executeCommand,
1250
1306
  "ExtensionApi.executeCompletionProvider": executeCompletionProvider,
1251
1307
  "ExtensionApi.executeFormattingProvider": executeFormattingProvider,
1308
+ "ExtensionApi.executeHoverProvider": executeHoverProvider,
1252
1309
  "ExtensionApi.executeResolveCompletionItemProvider": executeResolveCompletionItemProvider,
1253
1310
  "ExtensionApi.getCommandRegistrySnapshot": getCommandRegistrySnapshot,
1254
1311
  "ExtensionApi.getCompletionProviderRegistrySnapshot": getCompletionProviderRegistrySnapshot,
1255
1312
  "ExtensionApi.getFormattingProviderRegistrySnapshot": getFormattingProviderRegistrySnapshot,
1313
+ "ExtensionApi.getHoverProviderRegistrySnapshot": getHoverProviderRegistrySnapshot,
1256
1314
  "ExtensionApi.getStatusBarItems": getStatusBarItems
1257
1315
  };
1258
1316
 
@@ -1344,17 +1402,21 @@ export {
1344
1402
  executeCommand2 as executeCommand,
1345
1403
  executeCompletionProvider,
1346
1404
  executeFormattingProvider,
1405
+ executeHoverProvider,
1347
1406
  executeResolveCompletionItemProvider,
1348
1407
  getCompletionProviderRegistrySnapshot,
1349
1408
  getFormattingProviderRegistrySnapshot,
1409
+ getHoverProviderRegistrySnapshot,
1350
1410
  getStatusBarItemProviderRegistrySnapshot,
1351
1411
  handleExtensionManagementMessagePort2 as handleExtensionManagementMessagePort,
1352
1412
  registerCommand,
1353
1413
  registerCompletionProvider,
1354
1414
  registerFormattingProvider,
1415
+ registerHoverProvider,
1355
1416
  registerStatusBarItemProvider,
1356
1417
  resetCompletionProviderRegistry,
1357
1418
  resetFormattingProviderRegistry,
1419
+ resetHoverProviderRegistry,
1358
1420
  resetStatusBarItemProviderRegistry,
1359
1421
  showQuickPick
1360
1422
  };
@@ -0,0 +1,4 @@
1
+ import { executeHoverProvider } from "../HoverProviderRegistry/HoverProviderRegistry.js";
2
+ export {
3
+ executeHoverProvider
4
+ };
@@ -2,14 +2,17 @@ import { executeCommand, getCommandRegistrySnapshot } from "../CommandRegistry/C
2
2
  import { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot } from "../Completion/Completion.js";
3
3
  import { executeFormattingProvider, getFormattingProviderRegistrySnapshot } from "../Formatting/Formatting.js";
4
4
  import { getStatusBarItems } from "../GetStatusBarItems/GetStatusBarItems.js";
5
+ import { executeHoverProvider, getHoverProviderRegistrySnapshot } from "../Hover/Hover.js";
5
6
  const commandMap = {
6
7
  "ExtensionApi.executeCommand": executeCommand,
7
8
  "ExtensionApi.executeCompletionProvider": executeCompletionProvider,
8
9
  "ExtensionApi.executeFormattingProvider": executeFormattingProvider,
10
+ "ExtensionApi.executeHoverProvider": executeHoverProvider,
9
11
  "ExtensionApi.executeResolveCompletionItemProvider": executeResolveCompletionItemProvider,
10
12
  "ExtensionApi.getCommandRegistrySnapshot": getCommandRegistrySnapshot,
11
13
  "ExtensionApi.getCompletionProviderRegistrySnapshot": getCompletionProviderRegistrySnapshot,
12
14
  "ExtensionApi.getFormattingProviderRegistrySnapshot": getFormattingProviderRegistrySnapshot,
15
+ "ExtensionApi.getHoverProviderRegistrySnapshot": getHoverProviderRegistrySnapshot,
13
16
  "ExtensionApi.getStatusBarItems": getStatusBarItems
14
17
  };
15
18
  export {
@@ -0,0 +1,4 @@
1
+ import { getHoverProviderRegistrySnapshot } from "../HoverProviderRegistry/HoverProviderRegistry.js";
2
+ export {
3
+ getHoverProviderRegistrySnapshot
4
+ };
@@ -0,0 +1,10 @@
1
+ import { executeHoverProvider } from "../ExecuteHoverProvider/ExecuteHoverProvider.js";
2
+ import { getHoverProviderRegistrySnapshot } from "../GetHoverProviderRegistrySnapshot/GetHoverProviderRegistrySnapshot.js";
3
+ import { registerHoverProvider } from "../RegisterHoverProvider/RegisterHoverProvider.js";
4
+ import { resetHoverProviderRegistry } from "../ResetHoverProviderRegistry/ResetHoverProviderRegistry.js";
5
+ export {
6
+ executeHoverProvider,
7
+ getHoverProviderRegistrySnapshot,
8
+ registerHoverProvider,
9
+ resetHoverProviderRegistry
10
+ };
@@ -0,0 +1,64 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ import { createProviderRegistry } from "../ProviderRegistry/ProviderRegistry.js";
3
+ const getType = (value) => {
4
+ if (value === null) {
5
+ return "null";
6
+ }
7
+ if (typeof value === "string") {
8
+ return JSON.stringify(value);
9
+ }
10
+ if (Array.isArray(value)) {
11
+ return "array";
12
+ }
13
+ return typeof value;
14
+ };
15
+ const validateHoverResult = (hover) => {
16
+ if (hover === void 0) {
17
+ return void 0;
18
+ }
19
+ if (!hover || typeof hover !== "object" || Array.isArray(hover)) {
20
+ throw new ExtensionApiError(`invalid hover result: hover must be of type object or undefined but is ${getType(hover)}`);
21
+ }
22
+ return hover;
23
+ };
24
+ const registry = createProviderRegistry({
25
+ mapProvider(provider) {
26
+ return {
27
+ id: provider.id,
28
+ languageId: provider.languageId,
29
+ provideHover(textDocument, offset, ...args) {
30
+ return provider.provideHover(textDocument, offset, ...args);
31
+ }
32
+ };
33
+ },
34
+ providerName: "hover provider",
35
+ requiredMethods: ["provideHover"],
36
+ requireLanguageId: true
37
+ });
38
+ const hasHoverProvider = registry.hasProvider;
39
+ const registerHoverProvider = (provider) => {
40
+ const registeredProvider = registry.registerProvider(provider);
41
+ return {
42
+ dispose() {
43
+ registry.deleteProvider(registeredProvider.id);
44
+ }
45
+ };
46
+ };
47
+ const executeHoverProvider = async (textDocument, offset, ...args) => {
48
+ return registry.executeProviderByLanguageId(textDocument.languageId, "provideHover", [textDocument, offset, ...args], validateHoverResult);
49
+ };
50
+ const getHoverProviders = registry.getProviders;
51
+ const getHoverProviderRegistrySnapshot = () => {
52
+ return {
53
+ providers: registry.getProviders()
54
+ };
55
+ };
56
+ const resetHoverProviderRegistry = registry.reset;
57
+ export {
58
+ executeHoverProvider,
59
+ getHoverProviderRegistrySnapshot,
60
+ getHoverProviders,
61
+ hasHoverProvider,
62
+ registerHoverProvider,
63
+ resetHoverProviderRegistry
64
+ };
@@ -0,0 +1,4 @@
1
+ import { registerHoverProvider } from "../HoverProviderRegistry/HoverProviderRegistry.js";
2
+ export {
3
+ registerHoverProvider
4
+ };
@@ -0,0 +1,4 @@
1
+ import { resetHoverProviderRegistry } from "../HoverProviderRegistry/HoverProviderRegistry.js";
2
+ export {
3
+ resetHoverProviderRegistry
4
+ };
@@ -1991,7 +1991,7 @@ const {
1991
1991
  const {
1992
1992
  executeCompletionProvider,
1993
1993
  executeresolveCompletionItemProvider,
1994
- getProviders: getProviders$1,
1994
+ getProviders: getProviders$2,
1995
1995
  registerCompletionProvider} = create$6({
1996
1996
  additionalMethodNames: [
1997
1997
  // @ts-ignore
@@ -2012,7 +2012,7 @@ const {
2012
2012
  }
2013
2013
  });
2014
2014
  const getRegisteredCompletionProviderIds$1 = () => {
2015
- return getProviders$1().map(provider => provider.id);
2015
+ return getProviders$2().map(provider => provider.id);
2016
2016
  };
2017
2017
 
2018
2018
  const state$9 = {
@@ -2388,7 +2388,7 @@ const getPathSeparator = protocol => {
2388
2388
  const {
2389
2389
  executeFormattingProvider: executeRegisteredFormattingProvider,
2390
2390
  getProvider: getProvider$3,
2391
- getProviders,
2391
+ getProviders: getProviders$1,
2392
2392
  registerFormattingProvider} = create$6({
2393
2393
  executeKey: 'format',
2394
2394
  name: 'Formatting',
@@ -2424,7 +2424,7 @@ const executeFormattingProvider = async (textDocumentId, ...params) => {
2424
2424
  return executeRegisteredFormattingProviderWithParams(textDocumentId, ...params);
2425
2425
  };
2426
2426
  const getRegisteredFormattingProviderIds$1 = () => {
2427
- return getProviders().map(provider => provider.id);
2427
+ return getProviders$1().map(provider => provider.id);
2428
2428
  };
2429
2429
 
2430
2430
  const getOffset = (textDocument, position) => {
@@ -2465,6 +2465,7 @@ const getPosition = (textDocument, offset) => {
2465
2465
 
2466
2466
  const {
2467
2467
  executeHoverProvider,
2468
+ getProviders,
2468
2469
  registerHoverProvider} = create$6({
2469
2470
  name: 'Hover',
2470
2471
  resultShape: {
@@ -2473,6 +2474,9 @@ const {
2473
2474
  type: Object$1
2474
2475
  }
2475
2476
  });
2477
+ const getRegisteredHoverProviderIds$1 = () => {
2478
+ return getProviders().map(provider => provider.id);
2479
+ };
2476
2480
 
2477
2481
  const {
2478
2482
  executeImplementationProvider,
@@ -4245,6 +4249,12 @@ const getManifestCompletionProviderIds = extension => {
4245
4249
  }
4246
4250
  return extension.completionProviders.map(provider => provider.id).filter(id => typeof id === 'string');
4247
4251
  };
4252
+ const getManifestHoverProviderIds = extension => {
4253
+ if (!Array.isArray(extension.hoverProviders)) {
4254
+ return [];
4255
+ }
4256
+ return extension.hoverProviders.map(provider => provider.id).filter(id => typeof id === 'string');
4257
+ };
4248
4258
  const assertUniqueIds = (ids, label) => {
4249
4259
  const seen = new Set();
4250
4260
  for (const id of ids) {
@@ -4266,6 +4276,10 @@ const getNewRegisteredCompletionProviderIds = beforeCompletionProviderIds => {
4266
4276
  const before = new Set(beforeCompletionProviderIds);
4267
4277
  return getRegisteredCompletionProviderIds$1().filter(providerId => !before.has(providerId));
4268
4278
  };
4279
+ const getNewRegisteredHoverProviderIds = beforeHoverProviderIds => {
4280
+ const before = new Set(beforeHoverProviderIds);
4281
+ return getRegisteredHoverProviderIds$1().filter(providerId => !before.has(providerId));
4282
+ };
4269
4283
  const getRegisteredCommandIds = () => {
4270
4284
  return getRegisteredCommandIds$1();
4271
4285
  };
@@ -4275,6 +4289,9 @@ const getRegisteredCompletionProviderIds = () => {
4275
4289
  const getRegisteredFormattingProviderIds = () => {
4276
4290
  return getRegisteredFormattingProviderIds$1();
4277
4291
  };
4292
+ const getRegisteredHoverProviderIds = () => {
4293
+ return getRegisteredHoverProviderIds$1();
4294
+ };
4278
4295
  const validateIsolatedExtensionContribution = (label, manifestIds, registeredIds) => {
4279
4296
  assertUniqueIds(manifestIds, label);
4280
4297
  const manifestIdSet = new Set(manifestIds);
@@ -4314,6 +4331,14 @@ const validateIsolatedExtensionFormattingProviders = (extension, beforeFormattin
4314
4331
  const registeredFormattingProviderIds = getNewRegisteredFormattingProviderIds(beforeFormattingProviderIds);
4315
4332
  validateIsolatedExtensionContribution('formatting provider', manifestFormattingProviderIds, registeredFormattingProviderIds);
4316
4333
  };
4334
+ const validateIsolatedExtensionHoverProviders = (extension, beforeHoverProviderIds) => {
4335
+ if (!extension.isolated) {
4336
+ return;
4337
+ }
4338
+ const manifestHoverProviderIds = getManifestHoverProviderIds(extension);
4339
+ const registeredHoverProviderIds = getNewRegisteredHoverProviderIds(beforeHoverProviderIds);
4340
+ validateIsolatedExtensionContribution('hover provider', manifestHoverProviderIds, registeredHoverProviderIds);
4341
+ };
4317
4342
 
4318
4343
  // TODO make activation timeout configurable or remove it.
4319
4344
  // some extension might do workspace indexing which could take some time
@@ -4338,10 +4363,12 @@ const activateExtension2 = async (extensionId, extension, absolutePath) => {
4338
4363
  const beforeCommandIds = getRegisteredCommandIds();
4339
4364
  const beforeCompletionProviderIds = getRegisteredCompletionProviderIds();
4340
4365
  const beforeFormattingProviderIds = getRegisteredFormattingProviderIds();
4366
+ const beforeHoverProviderIds = getRegisteredHoverProviderIds();
4341
4367
  await Promise.race([activate(extension), rejectAfterTimeout$1(activationTimeout$1, token)]);
4342
4368
  validateIsolatedExtensionCommands(extension, beforeCommandIds);
4343
4369
  validateIsolatedExtensionCompletionProviders(extension, beforeCompletionProviderIds);
4344
4370
  validateIsolatedExtensionFormattingProviders(extension, beforeFormattingProviderIds);
4371
+ validateIsolatedExtensionHoverProviders(extension, beforeHoverProviderIds);
4345
4372
  const endTime = performance.now();
4346
4373
  const time = endTime - startTime;
4347
4374
  update(extensionId, {
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Lvce Editor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,23 @@
1
+ # @lvce-editor/api
2
+
3
+ Extension API for Lvce Editor extensions.
4
+
5
+ ```sh
6
+ npm install @lvce-editor/api
7
+ ```
8
+
9
+ ```ts
10
+ import { activate, registerCommand } from '@lvce-editor/api'
11
+
12
+ export const main = () => {
13
+ activate()
14
+ registerCommand({
15
+ id: 'example.hello',
16
+ execute() {
17
+ console.log('Hello from an extension')
18
+ },
19
+ })
20
+ }
21
+ ```
22
+
23
+ The package is published as unbundled ESM with TypeScript declaration files, so extensions can bundle it with their own build tooling.
@@ -0,0 +1,20 @@
1
+ export { activate } from './parts/Activation/Activation.ts';
2
+ export { executeCommand } from './parts/ExecuteCommand/ExecuteCommand.ts';
3
+ export { showQuickPick } from './parts/QuickPick/QuickPick.ts';
4
+ export { registerCommand } from './parts/CommandRegistry/CommandRegistry.ts';
5
+ export { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot, registerCompletionProvider, resetCompletionProviderRegistry, } from './parts/Completion/Completion.ts';
6
+ export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from './parts/Formatting/Formatting.ts';
7
+ export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from './parts/Hover/Hover.ts';
8
+ export { getStatusBarItemProviderRegistrySnapshot, registerStatusBarItemProvider, resetStatusBarItemProviderRegistry, } from './parts/StatusBar/StatusBar.ts';
9
+ export { handleExtensionManagementMessagePort } from './parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.ts';
10
+ export type { Command } from './parts/Command/Command.ts';
11
+ export type { CommandCallback } from './parts/CommandCallback/CommandCallback.ts';
12
+ export type { CommandRegistrySnapshot } from './parts/CommandRegistrySnapshot/CommandRegistrySnapshot.ts';
13
+ export type { CompletionItem, CompletionProvider, CompletionProviderRegistrySnapshot, RegisteredCompletionProvider, } from './parts/Completion/Completion.ts';
14
+ export type { Disposable } from './parts/Disposable/Disposable.ts';
15
+ export type { FormattingEdit, FormattingProvider, FormattingProviderRegistrySnapshot, RegisteredFormattingProvider, } from './parts/Formatting/Formatting.ts';
16
+ export type { HandleExtensionManagementMessagePortOptions } from './parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.ts';
17
+ export type { HoverProvider, HoverProviderRegistrySnapshot, HoverResult, RegisteredHoverProvider } from './parts/Hover/Hover.ts';
18
+ export type { QuickPickItem } from './parts/QuickPickItem/QuickPickItem.ts';
19
+ export type { ShowQuickPickOptions } from './parts/ShowQuickPickOptions/ShowQuickPickOptions.ts';
20
+ export type { StatusBarItem, StatusBarItemProvider, StatusBarItemProviderHandle, StatusBarItemProviderRegistrySnapshot, } from './parts/StatusBar/StatusBar.ts';
@@ -0,0 +1,9 @@
1
+ export { activate } from "./parts/Activation/Activation.js";
2
+ export { executeCommand } from "./parts/ExecuteCommand/ExecuteCommand.js";
3
+ export { showQuickPick } from "./parts/QuickPick/QuickPick.js";
4
+ export { registerCommand } from "./parts/CommandRegistry/CommandRegistry.js";
5
+ export { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot, registerCompletionProvider, resetCompletionProviderRegistry, } from "./parts/Completion/Completion.js";
6
+ export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from "./parts/Formatting/Formatting.js";
7
+ export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from "./parts/Hover/Hover.js";
8
+ export { getStatusBarItemProviderRegistrySnapshot, registerStatusBarItemProvider, resetStatusBarItemProviderRegistry, } from "./parts/StatusBar/StatusBar.js";
9
+ export { handleExtensionManagementMessagePort } from "./parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.js";
@@ -0,0 +1 @@
1
+ export declare const activate: () => Promise<void>;
@@ -0,0 +1,10 @@
1
+ import { listen } from "../ExtensionApiWorkerListen/ExtensionApiWorkerListen.js";
2
+ import * as Rpc from "../Rpc/Rpc.js";
3
+ let rpcPromise;
4
+ export const activate = async () => {
5
+ if (!rpcPromise) {
6
+ rpcPromise = listen();
7
+ }
8
+ const rpc = await rpcPromise;
9
+ Rpc.set(rpc);
10
+ };
@@ -0,0 +1,2 @@
1
+ import type { CompletionProvider } from '../CompletionProvider/CompletionProvider.ts';
2
+ export declare const assertCompletionProvider: (provider: CompletionProvider) => void;
@@ -0,0 +1,22 @@
1
+ import { hasCompletionProvider } from "../CompletionProviderState/CompletionProviderState.js";
2
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
3
+ export const assertCompletionProvider = (provider) => {
4
+ if (!provider) {
5
+ throw new ExtensionApiError('completion provider is not defined');
6
+ }
7
+ if (!provider.id) {
8
+ throw new ExtensionApiError('completion provider is missing id');
9
+ }
10
+ if (!provider.languageId) {
11
+ throw new ExtensionApiError(`completion provider ${provider.id} is missing languageId`);
12
+ }
13
+ if (typeof provider.provideCompletions !== 'function') {
14
+ throw new ExtensionApiError(`completion provider ${provider.id} is missing provideCompletions function`);
15
+ }
16
+ if (provider.resolveCompletionItem !== undefined && typeof provider.resolveCompletionItem !== 'function') {
17
+ throw new ExtensionApiError(`completion provider ${provider.id} has invalid resolveCompletionItem function`);
18
+ }
19
+ if (hasCompletionProvider(provider.id)) {
20
+ throw new ExtensionApiError(`completion provider ${provider.id} is already registered`);
21
+ }
22
+ };
@@ -0,0 +1,2 @@
1
+ import type { FormattingProvider } from '../FormattingProvider/FormattingProvider.ts';
2
+ export declare const assertFormattingProvider: (provider: FormattingProvider) => void;
@@ -0,0 +1,19 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ import { hasFormattingProvider } from "../FormattingProviderState/FormattingProviderState.js";
3
+ export const assertFormattingProvider = (provider) => {
4
+ if (!provider) {
5
+ throw new ExtensionApiError('formatting provider is not defined');
6
+ }
7
+ if (typeof provider.id !== 'string' || provider.id.length === 0) {
8
+ throw new ExtensionApiError('formatting provider is missing id');
9
+ }
10
+ if (typeof provider.languageId !== 'string' || provider.languageId.length === 0) {
11
+ throw new ExtensionApiError(`formatting provider ${provider.id} is missing languageId`);
12
+ }
13
+ if (typeof provider.format !== 'function') {
14
+ throw new ExtensionApiError(`formatting provider ${provider.id} is missing format function`);
15
+ }
16
+ if (hasFormattingProvider(provider.id)) {
17
+ throw new ExtensionApiError(`formatting provider ${provider.id} is already registered`);
18
+ }
19
+ };
@@ -0,0 +1,2 @@
1
+ import type { StatusBarItemProvider } from '../StatusBarItemProvider/StatusBarItemProvider.ts';
2
+ export declare const assertStatusBarItemProvider: (provider: StatusBarItemProvider) => void;
@@ -0,0 +1,16 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ import { hasStatusBarItemProvider } from "../StatusBarItemProviderState/StatusBarItemProviderState.js";
3
+ export const assertStatusBarItemProvider = (provider) => {
4
+ if (!provider) {
5
+ throw new ExtensionApiError('status bar item provider is not defined');
6
+ }
7
+ if (typeof provider.id !== 'string' || provider.id.length === 0) {
8
+ throw new ExtensionApiError('status bar item provider is missing id');
9
+ }
10
+ if (typeof provider.getStatusBarItem !== 'function') {
11
+ throw new ExtensionApiError(`status bar item provider ${provider.id} is missing getStatusBarItem function`);
12
+ }
13
+ if (hasStatusBarItemProvider(provider.id)) {
14
+ throw new ExtensionApiError(`status bar item provider ${provider.id} is already registered`);
15
+ }
16
+ };
@@ -0,0 +1,5 @@
1
+ import type { CommandCallback } from '../CommandCallback/CommandCallback.ts';
2
+ export interface Command<TArgs extends readonly unknown[] = readonly unknown[], TResult = unknown> {
3
+ readonly execute: CommandCallback<TArgs, TResult>;
4
+ readonly id: string;
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export type CommandCallback<TArgs extends readonly unknown[] = readonly unknown[], TResult = unknown> = (...args: TArgs) => TResult | Promise<TResult>;
@@ -0,0 +1,13 @@
1
+ export declare const commandMap: {
2
+ initialize(type: string, port: MessagePort): Promise<void>;
3
+ 'ExtensionApi.executeCommand': (id: string, ...args: readonly unknown[]) => Promise<unknown>;
4
+ 'ExtensionApi.executeCompletionProvider': (textDocument: import("../CompletionTextDocument/CompletionTextDocument.ts").TextDocument, offset: number, ...args: readonly unknown[]) => Promise<readonly import("../CompletionItem/CompletionItem.ts").CompletionItem[]>;
5
+ 'ExtensionApi.executeFormattingProvider': (textDocument: import("../FormattingTextDocument/FormattingTextDocument.ts").TextDocument, ...args: readonly unknown[]) => Promise<readonly import("../FormattingEdit/FormattingEdit.ts").FormattingEdit[]>;
6
+ 'ExtensionApi.executeHoverProvider': (textDocument: import("../HoverTextDocument/HoverTextDocument.ts").TextDocument, offset: number, ...args: readonly unknown[]) => Promise<import("../HoverResult/HoverResult.ts").HoverResult | undefined>;
7
+ 'ExtensionApi.executeResolveCompletionItemProvider': (textDocument: import("../CompletionTextDocument/CompletionTextDocument.ts").TextDocument, offset: number, name: string, completionItem: import("../CompletionItem/CompletionItem.ts").CompletionItem, ...args: readonly unknown[]) => Promise<import("../CompletionItem/CompletionItem.ts").CompletionItem | undefined>;
8
+ 'ExtensionApi.getCommandRegistrySnapshot': () => import("../CommandRegistrySnapshot/CommandRegistrySnapshot.ts").CommandRegistrySnapshot;
9
+ 'ExtensionApi.getCompletionProviderRegistrySnapshot': () => import("../CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.ts").CompletionProviderRegistrySnapshot;
10
+ 'ExtensionApi.getFormattingProviderRegistrySnapshot': () => import("../FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.ts").FormattingProviderRegistrySnapshot;
11
+ 'ExtensionApi.getHoverProviderRegistrySnapshot': () => import("../HoverProviderRegistrySnapshot/HoverProviderRegistrySnapshot.ts").HoverProviderRegistrySnapshot;
12
+ 'ExtensionApi.getStatusBarItems': () => readonly import("../StatusBarItem/StatusBarItem.ts").StatusBarItem[];
13
+ };
@@ -0,0 +1,11 @@
1
+ import { commandMap as extensionApiCommandMap } from "../ExtensionApiCommandMap/ExtensionApiCommandMap.js";
2
+ import { handleExtensionManagementMessagePort } from "../ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.js";
3
+ export const commandMap = {
4
+ ...extensionApiCommandMap,
5
+ async initialize(type, port) {
6
+ if (type !== 'message-port') {
7
+ throw new Error(`unsupported initialize type ${type}`);
8
+ }
9
+ await handleExtensionManagementMessagePort(port);
10
+ },
11
+ };
@@ -0,0 +1,7 @@
1
+ import type { Command } from '../Command/Command.ts';
2
+ import type { CommandRegistrySnapshot } from '../CommandRegistrySnapshot/CommandRegistrySnapshot.ts';
3
+ import type { Disposable } from '../Disposable/Disposable.ts';
4
+ export declare const registerCommand: <TArgs extends readonly unknown[], TResult>(command: Command<TArgs, TResult>) => Disposable;
5
+ export declare const getCommandRegistrySnapshot: () => CommandRegistrySnapshot;
6
+ export declare const executeCommand: (id: string, ...args: readonly unknown[]) => Promise<unknown>;
7
+ export declare const resetCommandRegistry: () => void;
@@ -0,0 +1,47 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ const commands = Object.create(null);
3
+ const assertCommand = (command) => {
4
+ if (!command) {
5
+ throw new ExtensionApiError('command is not defined');
6
+ }
7
+ if (typeof command.id !== 'string' || command.id.length === 0) {
8
+ throw new ExtensionApiError('command is missing id');
9
+ }
10
+ if (typeof command.execute !== 'function') {
11
+ throw new ExtensionApiError(`command ${command.id} is missing execute function`);
12
+ }
13
+ if (command.id in commands) {
14
+ throw new ExtensionApiError(`command ${command.id} is already registered`);
15
+ }
16
+ };
17
+ export const registerCommand = (command) => {
18
+ assertCommand(command);
19
+ commands[command.id] = {
20
+ execute(...args) {
21
+ return command.execute(...args);
22
+ },
23
+ id: command.id,
24
+ };
25
+ return {
26
+ dispose() {
27
+ delete commands[command.id];
28
+ },
29
+ };
30
+ };
31
+ export const getCommandRegistrySnapshot = () => {
32
+ return {
33
+ commands: Object.values(commands),
34
+ };
35
+ };
36
+ export const executeCommand = async (id, ...args) => {
37
+ const command = commands[id];
38
+ if (!command) {
39
+ throw new ExtensionApiError(`command ${id} not found`);
40
+ }
41
+ return command.execute(...args);
42
+ };
43
+ export const resetCommandRegistry = () => {
44
+ for (const id of Object.keys(commands)) {
45
+ delete commands[id];
46
+ }
47
+ };
@@ -0,0 +1,4 @@
1
+ import type { RegisteredCommand } from '../RegisteredCommand/RegisteredCommand.ts';
2
+ export interface CommandRegistrySnapshot {
3
+ readonly commands: readonly RegisteredCommand[];
4
+ }
@@ -0,0 +1,9 @@
1
+ export { executeCompletionProvider, executeResolveCompletionItemProvider } from '../ExecuteCompletionProvider/ExecuteCompletionProvider.ts';
2
+ export { getCompletionProviderRegistrySnapshot } from '../GetCompletionProviderRegistrySnapshot/GetCompletionProviderRegistrySnapshot.ts';
3
+ export { registerCompletionProvider } from '../RegisterCompletionProvider/RegisterCompletionProvider.ts';
4
+ export { resetCompletionProviderRegistry } from '../ResetCompletionProviderRegistry/ResetCompletionProviderRegistry.ts';
5
+ export type { CompletionItem } from '../CompletionItem/CompletionItem.ts';
6
+ export type { CompletionProvider } from '../CompletionProvider/CompletionProvider.ts';
7
+ export type { CompletionProviderRegistrySnapshot } from '../CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.ts';
8
+ export type { TextDocument } from '../CompletionTextDocument/CompletionTextDocument.ts';
9
+ export type { RegisteredCompletionProvider } from '../RegisteredCompletionProvider/RegisteredCompletionProvider.ts';
@@ -0,0 +1,4 @@
1
+ export { executeCompletionProvider, executeResolveCompletionItemProvider } from "../ExecuteCompletionProvider/ExecuteCompletionProvider.js";
2
+ export { getCompletionProviderRegistrySnapshot } from "../GetCompletionProviderRegistrySnapshot/GetCompletionProviderRegistrySnapshot.js";
3
+ export { registerCompletionProvider } from "../RegisterCompletionProvider/RegisterCompletionProvider.js";
4
+ export { resetCompletionProviderRegistry } from "../ResetCompletionProviderRegistry/ResetCompletionProviderRegistry.js";