@lvce-editor/extension-host-worker 8.15.0 → 8.17.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 (63) hide show
  1. package/dist/extension-api/index.js +1360 -0
  2. package/dist/extension-api/parts/Activation/Activation.js +13 -0
  3. package/dist/extension-api/parts/AssertCompletionProvider/AssertCompletionProvider.js +25 -0
  4. package/dist/extension-api/parts/AssertFormattingProvider/AssertFormattingProvider.js +22 -0
  5. package/dist/extension-api/parts/AssertStatusBarItemProvider/AssertStatusBarItemProvider.js +19 -0
  6. package/dist/extension-api/parts/Command/Command.js +0 -0
  7. package/dist/extension-api/parts/CommandCallback/CommandCallback.js +0 -0
  8. package/dist/extension-api/parts/CommandMap/CommandMap.js +14 -0
  9. package/dist/extension-api/parts/CommandRegistry/CommandRegistry.js +53 -0
  10. package/dist/extension-api/parts/CommandRegistrySnapshot/CommandRegistrySnapshot.js +0 -0
  11. package/dist/extension-api/parts/Completion/Completion.js +11 -0
  12. package/dist/extension-api/parts/CompletionItem/CompletionItem.js +0 -0
  13. package/dist/extension-api/parts/CompletionProvider/CompletionProvider.js +0 -0
  14. package/dist/extension-api/parts/CompletionProviderRegistry/CompletionProviderRegistry.js +78 -0
  15. package/dist/extension-api/parts/CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.js +0 -0
  16. package/dist/extension-api/parts/CompletionProviderState/CompletionProviderState.js +10 -0
  17. package/dist/extension-api/parts/CompletionTextDocument/CompletionTextDocument.js +0 -0
  18. package/dist/extension-api/parts/Disposable/Disposable.js +0 -0
  19. package/dist/extension-api/parts/ExecuteCommand/ExecuteCommand.js +7 -0
  20. package/dist/extension-api/parts/ExecuteCompletionProvider/ExecuteCompletionProvider.js +5 -0
  21. package/dist/extension-api/parts/ExecuteFormattingProvider/ExecuteFormattingProvider.js +4 -0
  22. package/dist/extension-api/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +17 -0
  23. package/dist/extension-api/parts/ExtensionApiError/ExtensionApiError.js +9 -0
  24. package/dist/extension-api/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.js +15 -0
  25. package/dist/extension-api/parts/ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.js +21 -0
  26. package/dist/extension-api/parts/ExtensionApiWorkerListen/ExtensionApiWorkerListen.js +11 -0
  27. package/dist/extension-api/parts/Formatting/Formatting.js +10 -0
  28. package/dist/extension-api/parts/FormattingEdit/FormattingEdit.js +0 -0
  29. package/dist/extension-api/parts/FormattingProvider/FormattingProvider.js +0 -0
  30. package/dist/extension-api/parts/FormattingProviderRegistry/FormattingProviderRegistry.js +42 -0
  31. package/dist/extension-api/parts/FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.js +0 -0
  32. package/dist/extension-api/parts/FormattingProviderState/FormattingProviderState.js +10 -0
  33. package/dist/extension-api/parts/FormattingTextDocument/FormattingTextDocument.js +0 -0
  34. package/dist/extension-api/parts/GetCompletionProviderRegistrySnapshot/GetCompletionProviderRegistrySnapshot.js +4 -0
  35. package/dist/extension-api/parts/GetFormattingProviderRegistrySnapshot/GetFormattingProviderRegistrySnapshot.js +4 -0
  36. package/dist/extension-api/parts/GetStatusBarItemProviderRegistrySnapshot/GetStatusBarItemProviderRegistrySnapshot.js +4 -0
  37. package/dist/extension-api/parts/GetStatusBarItems/GetStatusBarItems.js +4 -0
  38. package/dist/extension-api/parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.js +17 -0
  39. package/dist/extension-api/parts/NotifyStatusBarChange/NotifyStatusBarChange.js +7 -0
  40. package/dist/extension-api/parts/ProviderRegistry/ProviderRegistry.js +95 -0
  41. package/dist/extension-api/parts/QuickPick/QuickPick.js +7 -0
  42. package/dist/extension-api/parts/QuickPickItem/QuickPickItem.js +0 -0
  43. package/dist/extension-api/parts/RegisterCompletionProvider/RegisterCompletionProvider.js +4 -0
  44. package/dist/extension-api/parts/RegisterFormattingProvider/RegisterFormattingProvider.js +4 -0
  45. package/dist/extension-api/parts/RegisterStatusBarItemProvider/RegisterStatusBarItemProvider.js +4 -0
  46. package/dist/extension-api/parts/RegisteredCommand/RegisteredCommand.js +0 -0
  47. package/dist/extension-api/parts/RegisteredCompletionProvider/RegisteredCompletionProvider.js +0 -0
  48. package/dist/extension-api/parts/RegisteredFormattingProvider/RegisteredFormattingProvider.js +0 -0
  49. package/dist/extension-api/parts/RegisteredStatusBarItemProvider/RegisteredStatusBarItemProvider.js +0 -0
  50. package/dist/extension-api/parts/ResetCompletionProviderRegistry/ResetCompletionProviderRegistry.js +4 -0
  51. package/dist/extension-api/parts/ResetFormattingProviderRegistry/ResetFormattingProviderRegistry.js +4 -0
  52. package/dist/extension-api/parts/ResetStatusBarItemProviderRegistry/ResetStatusBarItemProviderRegistry.js +4 -0
  53. package/dist/extension-api/parts/Rpc/Rpc.js +14 -0
  54. package/dist/extension-api/parts/ShowQuickPickOptions/ShowQuickPickOptions.js +0 -0
  55. package/dist/extension-api/parts/StatusBar/StatusBar.js +8 -0
  56. package/dist/extension-api/parts/StatusBarItem/StatusBarItem.js +0 -0
  57. package/dist/extension-api/parts/StatusBarItemProvider/StatusBarItemProvider.js +0 -0
  58. package/dist/extension-api/parts/StatusBarItemProviderHandle/StatusBarItemProviderHandle.js +0 -0
  59. package/dist/extension-api/parts/StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.js +52 -0
  60. package/dist/extension-api/parts/StatusBarItemProviderRegistrySnapshot/StatusBarItemProviderRegistrySnapshot.js +0 -0
  61. package/dist/extension-api/parts/StatusBarItemProviderState/StatusBarItemProviderState.js +10 -0
  62. package/dist/extensionHostWorkerMain.js +1308 -1200
  63. package/package.json +1 -1
@@ -0,0 +1,13 @@
1
+ import { listen } from "../ExtensionApiWorkerListen/ExtensionApiWorkerListen.js";
2
+ import * as Rpc from "../Rpc/Rpc.js";
3
+ let rpcPromise;
4
+ const activate = async () => {
5
+ if (!rpcPromise) {
6
+ rpcPromise = listen();
7
+ }
8
+ const rpc = await rpcPromise;
9
+ Rpc.set(rpc);
10
+ };
11
+ export {
12
+ activate
13
+ };
@@ -0,0 +1,25 @@
1
+ import { hasCompletionProvider } from "../CompletionProviderState/CompletionProviderState.js";
2
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
3
+ 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 !== void 0 && 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
+ };
23
+ export {
24
+ assertCompletionProvider
25
+ };
@@ -0,0 +1,22 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ import { hasFormattingProvider } from "../FormattingProviderState/FormattingProviderState.js";
3
+ 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
+ };
20
+ export {
21
+ assertFormattingProvider
22
+ };
@@ -0,0 +1,19 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ import { hasStatusBarItemProvider } from "../StatusBarItemProviderState/StatusBarItemProviderState.js";
3
+ 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
+ };
17
+ export {
18
+ assertStatusBarItemProvider
19
+ };
File without changes
@@ -0,0 +1,14 @@
1
+ import { commandMap as extensionApiCommandMap } from "../ExtensionApiCommandMap/ExtensionApiCommandMap.js";
2
+ import { handleExtensionManagementMessagePort } from "../ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.js";
3
+ 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
+ };
12
+ export {
13
+ commandMap
14
+ };
@@ -0,0 +1,53 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ const commands = /* @__PURE__ */ 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
+ 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
+ const getCommandRegistrySnapshot = () => {
32
+ return {
33
+ commands: Object.values(commands)
34
+ };
35
+ };
36
+ 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
+ const resetCommandRegistry = () => {
44
+ for (const id of Object.keys(commands)) {
45
+ delete commands[id];
46
+ }
47
+ };
48
+ export {
49
+ executeCommand,
50
+ getCommandRegistrySnapshot,
51
+ registerCommand,
52
+ resetCommandRegistry
53
+ };
@@ -0,0 +1,11 @@
1
+ import { executeCompletionProvider, executeResolveCompletionItemProvider } from "../ExecuteCompletionProvider/ExecuteCompletionProvider.js";
2
+ import { getCompletionProviderRegistrySnapshot } from "../GetCompletionProviderRegistrySnapshot/GetCompletionProviderRegistrySnapshot.js";
3
+ import { registerCompletionProvider } from "../RegisterCompletionProvider/RegisterCompletionProvider.js";
4
+ import { resetCompletionProviderRegistry } from "../ResetCompletionProviderRegistry/ResetCompletionProviderRegistry.js";
5
+ export {
6
+ executeCompletionProvider,
7
+ executeResolveCompletionItemProvider,
8
+ getCompletionProviderRegistrySnapshot,
9
+ registerCompletionProvider,
10
+ resetCompletionProviderRegistry
11
+ };
@@ -0,0 +1,78 @@
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
+ return typeof value;
11
+ };
12
+ const validateCompletionResult = (completion) => {
13
+ if (!Array.isArray(completion)) {
14
+ throw new ExtensionApiError(`invalid completion result: completion must be of type array but is ${getType(completion)}`);
15
+ }
16
+ for (const item of completion) {
17
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
18
+ throw new ExtensionApiError(`invalid completion result: expected completion item to be of type object but was of type ${getType(item)}`);
19
+ }
20
+ }
21
+ return completion;
22
+ };
23
+ const registry = createProviderRegistry({
24
+ mapProvider(provider) {
25
+ return {
26
+ id: provider.id,
27
+ languageId: provider.languageId,
28
+ provideCompletions(textDocument, offset, ...args) {
29
+ return provider.provideCompletions(textDocument, offset, ...args);
30
+ },
31
+ resolveCompletionItem: provider.resolveCompletionItem ? (textDocument, offset, name, completionItem, ...args) => provider.resolveCompletionItem?.(textDocument, offset, name, completionItem, ...args) : void 0
32
+ };
33
+ },
34
+ optionalMethods: ["resolveCompletionItem"],
35
+ providerName: "completion provider",
36
+ requiredMethods: ["provideCompletions"],
37
+ requireLanguageId: true
38
+ });
39
+ const hasCompletionProvider = registry.hasProvider;
40
+ const registerCompletionProvider = (provider) => {
41
+ const registeredProvider = registry.registerProvider(provider);
42
+ return {
43
+ dispose() {
44
+ registry.deleteProvider(registeredProvider.id);
45
+ }
46
+ };
47
+ };
48
+ const executeCompletionProvider = async (textDocument, offset, ...args) => {
49
+ return registry.executeProviderByLanguageId(
50
+ textDocument.languageId,
51
+ "provideCompletions",
52
+ [textDocument, offset, ...args],
53
+ validateCompletionResult
54
+ );
55
+ };
56
+ const executeResolveCompletionItemProvider = async (textDocument, offset, name, completionItem, ...args) => {
57
+ const provider = registry.getProviderByLanguageId(textDocument.languageId);
58
+ if (!provider) {
59
+ throw new ExtensionApiError(`No completion provider found for ${textDocument.languageId}`);
60
+ }
61
+ return provider.resolveCompletionItem?.(textDocument, offset, name, completionItem, ...args);
62
+ };
63
+ const getCompletionProviders = registry.getProviders;
64
+ const getCompletionProviderRegistrySnapshot = () => {
65
+ return {
66
+ providers: registry.getProviders()
67
+ };
68
+ };
69
+ const resetCompletionProviderRegistry = registry.reset;
70
+ export {
71
+ executeCompletionProvider,
72
+ executeResolveCompletionItemProvider,
73
+ getCompletionProviderRegistrySnapshot,
74
+ getCompletionProviders,
75
+ hasCompletionProvider,
76
+ registerCompletionProvider,
77
+ resetCompletionProviderRegistry
78
+ };
@@ -0,0 +1,10 @@
1
+ import {
2
+ getCompletionProviders,
3
+ hasCompletionProvider,
4
+ resetCompletionProviderRegistry
5
+ } from "../CompletionProviderRegistry/CompletionProviderRegistry.js";
6
+ export {
7
+ resetCompletionProviderRegistry as clearCompletionProviders,
8
+ getCompletionProviders,
9
+ hasCompletionProvider
10
+ };
@@ -0,0 +1,7 @@
1
+ import * as Rpc from "../Rpc/Rpc.js";
2
+ const executeCommand = async (id, ...args) => {
3
+ return Rpc.invoke("Extensions.executeCommand", id, ...args);
4
+ };
5
+ export {
6
+ executeCommand
7
+ };
@@ -0,0 +1,5 @@
1
+ import { executeCompletionProvider, executeResolveCompletionItemProvider } from "../CompletionProviderRegistry/CompletionProviderRegistry.js";
2
+ export {
3
+ executeCompletionProvider,
4
+ executeResolveCompletionItemProvider
5
+ };
@@ -0,0 +1,4 @@
1
+ import { executeFormattingProvider } from "../FormattingProviderRegistry/FormattingProviderRegistry.js";
2
+ export {
3
+ executeFormattingProvider
4
+ };
@@ -0,0 +1,17 @@
1
+ import { executeCommand, getCommandRegistrySnapshot } from "../CommandRegistry/CommandRegistry.js";
2
+ import { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot } from "../Completion/Completion.js";
3
+ import { executeFormattingProvider, getFormattingProviderRegistrySnapshot } from "../Formatting/Formatting.js";
4
+ import { getStatusBarItems } from "../GetStatusBarItems/GetStatusBarItems.js";
5
+ const commandMap = {
6
+ "ExtensionApi.executeCommand": executeCommand,
7
+ "ExtensionApi.executeCompletionProvider": executeCompletionProvider,
8
+ "ExtensionApi.executeFormattingProvider": executeFormattingProvider,
9
+ "ExtensionApi.executeResolveCompletionItemProvider": executeResolveCompletionItemProvider,
10
+ "ExtensionApi.getCommandRegistrySnapshot": getCommandRegistrySnapshot,
11
+ "ExtensionApi.getCompletionProviderRegistrySnapshot": getCompletionProviderRegistrySnapshot,
12
+ "ExtensionApi.getFormattingProviderRegistrySnapshot": getFormattingProviderRegistrySnapshot,
13
+ "ExtensionApi.getStatusBarItems": getStatusBarItems
14
+ };
15
+ export {
16
+ commandMap
17
+ };
@@ -0,0 +1,9 @@
1
+ class ExtensionApiError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = "ExtensionApiError";
5
+ }
6
+ }
7
+ export {
8
+ ExtensionApiError
9
+ };
@@ -0,0 +1,15 @@
1
+ import { commandMap as extensionApiCommandMap } from "../ExtensionApiCommandMap/ExtensionApiCommandMap.js";
2
+ import { handleExtensionManagementMessagePort } from "../ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.js";
3
+ const commandMap = {
4
+ ...extensionApiCommandMap,
5
+ "HandleMessagePort.handleExtensionManagementMessagePort": handleExtensionManagementMessagePort,
6
+ async initialize(type, port) {
7
+ if (type !== "message-port") {
8
+ throw new Error(`unsupported initialize type ${type}`);
9
+ }
10
+ await handleExtensionManagementMessagePort(port);
11
+ }
12
+ };
13
+ export {
14
+ commandMap
15
+ };
@@ -0,0 +1,21 @@
1
+ import { PlainMessagePortRpc } from "@lvce-editor/rpc";
2
+ import * as ExtensionApiCommandMap from "../ExtensionApiCommandMap/ExtensionApiCommandMap.js";
3
+ const commandMap = {
4
+ ...ExtensionApiCommandMap.commandMap,
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
+ };
12
+ const handleExtensionManagementMessagePort = async (port) => {
13
+ await PlainMessagePortRpc.create({
14
+ commandMap,
15
+ isMessagePortOpen: true,
16
+ messagePort: port
17
+ });
18
+ };
19
+ export {
20
+ handleExtensionManagementMessagePort
21
+ };
@@ -0,0 +1,11 @@
1
+ import { WebWorkerRpcClient } from "@lvce-editor/rpc";
2
+ import * as ExtensionApiWorkerCommandMap from "../ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.js";
3
+ const listen = async () => {
4
+ const rpc = WebWorkerRpcClient.create({
5
+ commandMap: ExtensionApiWorkerCommandMap.commandMap
6
+ });
7
+ return rpc;
8
+ };
9
+ export {
10
+ listen
11
+ };
@@ -0,0 +1,10 @@
1
+ import { executeFormattingProvider } from "../ExecuteFormattingProvider/ExecuteFormattingProvider.js";
2
+ import { getFormattingProviderRegistrySnapshot } from "../GetFormattingProviderRegistrySnapshot/GetFormattingProviderRegistrySnapshot.js";
3
+ import { registerFormattingProvider } from "../RegisterFormattingProvider/RegisterFormattingProvider.js";
4
+ import { resetFormattingProviderRegistry } from "../ResetFormattingProviderRegistry/ResetFormattingProviderRegistry.js";
5
+ export {
6
+ executeFormattingProvider,
7
+ getFormattingProviderRegistrySnapshot,
8
+ registerFormattingProvider,
9
+ resetFormattingProviderRegistry
10
+ };
@@ -0,0 +1,42 @@
1
+ import { createProviderRegistry } from "../ProviderRegistry/ProviderRegistry.js";
2
+ const registry = createProviderRegistry({
3
+ mapProvider(provider) {
4
+ return {
5
+ format(textDocument, ...args) {
6
+ return provider.format(textDocument, ...args);
7
+ },
8
+ id: provider.id,
9
+ languageId: provider.languageId
10
+ };
11
+ },
12
+ providerName: "formatting provider",
13
+ requiredMethods: ["format"],
14
+ requireLanguageId: true
15
+ });
16
+ const hasFormattingProvider = registry.hasProvider;
17
+ const registerFormattingProvider = (provider) => {
18
+ const registeredProvider = registry.registerProvider(provider);
19
+ return {
20
+ dispose() {
21
+ registry.deleteProvider(registeredProvider.id);
22
+ }
23
+ };
24
+ };
25
+ const executeFormattingProvider = async (textDocument, ...args) => {
26
+ return registry.executeProviderByLanguageId(textDocument.languageId, "format", [textDocument, ...args]);
27
+ };
28
+ const getFormattingProviders = registry.getProviders;
29
+ const getFormattingProviderRegistrySnapshot = () => {
30
+ return {
31
+ providers: registry.getProviders()
32
+ };
33
+ };
34
+ const resetFormattingProviderRegistry = registry.reset;
35
+ export {
36
+ executeFormattingProvider,
37
+ getFormattingProviderRegistrySnapshot,
38
+ getFormattingProviders,
39
+ hasFormattingProvider,
40
+ registerFormattingProvider,
41
+ resetFormattingProviderRegistry
42
+ };
@@ -0,0 +1,10 @@
1
+ import {
2
+ getFormattingProviders,
3
+ hasFormattingProvider,
4
+ resetFormattingProviderRegistry
5
+ } from "../FormattingProviderRegistry/FormattingProviderRegistry.js";
6
+ export {
7
+ resetFormattingProviderRegistry as clearFormattingProviders,
8
+ getFormattingProviders,
9
+ hasFormattingProvider
10
+ };
@@ -0,0 +1,4 @@
1
+ import { getCompletionProviderRegistrySnapshot } from "../CompletionProviderRegistry/CompletionProviderRegistry.js";
2
+ export {
3
+ getCompletionProviderRegistrySnapshot
4
+ };
@@ -0,0 +1,4 @@
1
+ import { getFormattingProviderRegistrySnapshot } from "../FormattingProviderRegistry/FormattingProviderRegistry.js";
2
+ export {
3
+ getFormattingProviderRegistrySnapshot
4
+ };
@@ -0,0 +1,4 @@
1
+ import { getStatusBarItemProviderRegistrySnapshot } from "../StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.js";
2
+ export {
3
+ getStatusBarItemProviderRegistrySnapshot
4
+ };
@@ -0,0 +1,4 @@
1
+ import { getStatusBarItems } from "../StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.js";
2
+ export {
3
+ getStatusBarItems
4
+ };
@@ -0,0 +1,17 @@
1
+ import { commandMap as extensionApiCommandMap } from "../CommandMap/CommandMap.js";
2
+ const handleExtensionManagementMessagePort = async ({
3
+ commandMap,
4
+ createMessagePortRpcClient,
5
+ port
6
+ }) => {
7
+ await createMessagePortRpcClient({
8
+ commandMap: {
9
+ ...extensionApiCommandMap,
10
+ ...commandMap
11
+ },
12
+ messagePort: port
13
+ });
14
+ };
15
+ export {
16
+ handleExtensionManagementMessagePort
17
+ };
@@ -0,0 +1,7 @@
1
+ import * as Rpc from "../Rpc/Rpc.js";
2
+ const notifyStatusBarChange = async (id) => {
3
+ await Rpc.invoke("StatusBar.handleChange", id);
4
+ };
5
+ export {
6
+ notifyStatusBarChange
7
+ };
@@ -0,0 +1,95 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ const getProviderMethod = (provider, methodName) => {
3
+ const method = provider[methodName];
4
+ if (typeof method !== "function") {
5
+ return void 0;
6
+ }
7
+ return method;
8
+ };
9
+ const assertProviderMethod = (provider, providerName, providerId, methodName) => {
10
+ if (typeof provider[methodName] !== "function") {
11
+ throw new ExtensionApiError(`${providerName} ${providerId} is missing ${methodName} function`);
12
+ }
13
+ };
14
+ const assertOptionalProviderMethod = (provider, providerName, providerId, methodName) => {
15
+ if (provider[methodName] !== void 0 && typeof provider[methodName] !== "function") {
16
+ throw new ExtensionApiError(`${providerName} ${providerId} has invalid ${methodName} function`);
17
+ }
18
+ };
19
+ const createProviderRegistry = ({
20
+ mapProvider,
21
+ optionalMethods = [],
22
+ providerName,
23
+ requiredMethods,
24
+ requireLanguageId = false
25
+ }) => {
26
+ const providers = /* @__PURE__ */ Object.create(null);
27
+ const hasProvider = (id) => {
28
+ return id in providers;
29
+ };
30
+ const registerProvider = (provider) => {
31
+ if (!provider) {
32
+ throw new ExtensionApiError(`${providerName} is not defined`);
33
+ }
34
+ const providerRecord = provider;
35
+ const { id } = providerRecord;
36
+ if (typeof id !== "string" || id.length === 0) {
37
+ throw new ExtensionApiError(`${providerName} is missing id`);
38
+ }
39
+ if (requireLanguageId && (typeof providerRecord.languageId !== "string" || providerRecord.languageId.length === 0)) {
40
+ throw new ExtensionApiError(`${providerName} ${id} is missing languageId`);
41
+ }
42
+ for (const methodName of requiredMethods) {
43
+ assertProviderMethod(providerRecord, providerName, id, methodName);
44
+ }
45
+ for (const methodName of optionalMethods) {
46
+ assertOptionalProviderMethod(providerRecord, providerName, id, methodName);
47
+ }
48
+ if (hasProvider(id)) {
49
+ throw new ExtensionApiError(`${providerName} ${id} is already registered`);
50
+ }
51
+ const registeredProvider = mapProvider(provider);
52
+ providers[registeredProvider.id] = registeredProvider;
53
+ return registeredProvider;
54
+ };
55
+ const deleteProvider = (id) => {
56
+ delete providers[id];
57
+ };
58
+ const getProviders = () => {
59
+ return Object.values(providers);
60
+ };
61
+ const getProviderByLanguageId = (languageId) => {
62
+ return getProviders().find((provider) => {
63
+ return "languageId" in provider && provider.languageId === languageId;
64
+ });
65
+ };
66
+ const reset = () => {
67
+ for (const id of Object.keys(providers)) {
68
+ delete providers[id];
69
+ }
70
+ };
71
+ const executeProviderByLanguageId = async (languageId, methodName, args, validateResult) => {
72
+ const provider = getProviderByLanguageId(languageId);
73
+ if (!provider) {
74
+ throw new ExtensionApiError(`No ${providerName} found for ${languageId}`);
75
+ }
76
+ const method = getProviderMethod(provider, methodName);
77
+ if (!method) {
78
+ throw new ExtensionApiError(`${providerName} ${provider.id} is missing ${methodName} function`);
79
+ }
80
+ const result = await method(...args);
81
+ return validateResult ? validateResult(result) : result;
82
+ };
83
+ return {
84
+ deleteProvider,
85
+ executeProviderByLanguageId,
86
+ getProviderByLanguageId,
87
+ getProviders,
88
+ hasProvider,
89
+ registerProvider,
90
+ reset
91
+ };
92
+ };
93
+ export {
94
+ createProviderRegistry
95
+ };
@@ -0,0 +1,7 @@
1
+ import * as Rpc from "../Rpc/Rpc.js";
2
+ const showQuickPick = async (options) => {
3
+ return Rpc.invoke("ExtensionHostQuickPick.showQuickPick", options);
4
+ };
5
+ export {
6
+ showQuickPick
7
+ };
@@ -0,0 +1,4 @@
1
+ import { registerCompletionProvider } from "../CompletionProviderRegistry/CompletionProviderRegistry.js";
2
+ export {
3
+ registerCompletionProvider
4
+ };
@@ -0,0 +1,4 @@
1
+ import { registerFormattingProvider } from "../FormattingProviderRegistry/FormattingProviderRegistry.js";
2
+ export {
3
+ registerFormattingProvider
4
+ };
@@ -0,0 +1,4 @@
1
+ import { registerStatusBarItemProvider } from "../StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.js";
2
+ export {
3
+ registerStatusBarItemProvider
4
+ };
@@ -0,0 +1,4 @@
1
+ import { resetCompletionProviderRegistry } from "../CompletionProviderRegistry/CompletionProviderRegistry.js";
2
+ export {
3
+ resetCompletionProviderRegistry
4
+ };