@lvce-editor/extension-host-worker 8.29.0 → 8.32.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 (30) hide show
  1. package/dist/extension-api/index.js +182 -9
  2. package/dist/extension-api/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +24 -0
  3. package/dist/extension-api/parts/Preferences/Preferences.js +11 -0
  4. package/dist/extension-api/parts/RegisteredSourceControlProvider/RegisteredSourceControlProvider.js +0 -0
  5. package/dist/extension-api/parts/SourceControl/SourceControl.js +30 -0
  6. package/dist/extension-api/parts/SourceControlProvider/SourceControlProvider.js +0 -0
  7. package/dist/extension-api/parts/SourceControlProviderRegistry/SourceControlProviderRegistry.js +154 -0
  8. package/dist/extension-api/parts/SourceControlProviderRegistrySnapshot/SourceControlProviderRegistrySnapshot.js +0 -0
  9. package/dist/extensionHostWorkerMain.js +373 -0
  10. package/extension-api/dist/index.d.ts +3 -0
  11. package/extension-api/dist/index.js +2 -0
  12. package/extension-api/dist/parts/CommandMap/CommandMap.d.ts +11 -0
  13. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.d.ts +11 -0
  14. package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +12 -0
  15. package/extension-api/dist/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.d.ts +11 -0
  16. package/extension-api/dist/parts/Preferences/Preferences.d.ts +2 -0
  17. package/extension-api/dist/parts/Preferences/Preferences.js +7 -0
  18. package/extension-api/dist/parts/RegisteredSourceControlProvider/RegisteredSourceControlProvider.d.ts +13 -0
  19. package/extension-api/dist/parts/RegisteredSourceControlProvider/RegisteredSourceControlProvider.js +1 -0
  20. package/extension-api/dist/parts/SourceControl/SourceControl.d.ts +4 -0
  21. package/extension-api/dist/parts/SourceControl/SourceControl.js +1 -0
  22. package/extension-api/dist/parts/SourceControlProvider/SourceControlProvider.d.ts +13 -0
  23. package/extension-api/dist/parts/SourceControlProvider/SourceControlProvider.js +1 -0
  24. package/extension-api/dist/parts/SourceControlProviderRegistry/SourceControlProviderRegistry.d.ts +16 -0
  25. package/extension-api/dist/parts/SourceControlProviderRegistry/SourceControlProviderRegistry.js +139 -0
  26. package/extension-api/dist/parts/SourceControlProviderRegistrySnapshot/SourceControlProviderRegistrySnapshot.d.ts +5 -0
  27. package/extension-api/dist/parts/SourceControlProviderRegistrySnapshot/SourceControlProviderRegistrySnapshot.js +1 -0
  28. package/extension-api/package.json +1 -1
  29. package/extension-api/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +5 -2
@@ -1551,14 +1551,14 @@ var assertOptionalProviderMethod = (provider, providerName, providerId, methodNa
1551
1551
  };
1552
1552
  var createProviderRegistry = ({
1553
1553
  mapProvider,
1554
- optionalMethods = [],
1554
+ optionalMethods: optionalMethods2 = [],
1555
1555
  providerName,
1556
1556
  requiredMethods,
1557
1557
  requireLanguageId = false
1558
1558
  }) => {
1559
- const providers = /* @__PURE__ */ Object.create(null);
1559
+ const providers2 = /* @__PURE__ */ Object.create(null);
1560
1560
  const hasProvider = (id2) => {
1561
- return id2 in providers;
1561
+ return id2 in providers2;
1562
1562
  };
1563
1563
  const registerProvider = (provider) => {
1564
1564
  if (!provider) {
@@ -1575,21 +1575,21 @@ var createProviderRegistry = ({
1575
1575
  for (const methodName of requiredMethods) {
1576
1576
  assertProviderMethod(providerRecord, providerName, id2, methodName);
1577
1577
  }
1578
- for (const methodName of optionalMethods) {
1578
+ for (const methodName of optionalMethods2) {
1579
1579
  assertOptionalProviderMethod(providerRecord, providerName, id2, methodName);
1580
1580
  }
1581
1581
  if (hasProvider(id2)) {
1582
1582
  throw new ExtensionApiError(`${providerName} ${id2} is already registered`);
1583
1583
  }
1584
1584
  const registeredProvider = mapProvider(provider);
1585
- providers[registeredProvider.id] = registeredProvider;
1585
+ providers2[registeredProvider.id] = registeredProvider;
1586
1586
  return registeredProvider;
1587
1587
  };
1588
1588
  const deleteProvider = (id2) => {
1589
- delete providers[id2];
1589
+ delete providers2[id2];
1590
1590
  };
1591
1591
  const getProviders = () => {
1592
- return Object.values(providers);
1592
+ return Object.values(providers2);
1593
1593
  };
1594
1594
  const getProviderByLanguageId = (languageId) => {
1595
1595
  return getProviders().find((provider) => {
@@ -1597,8 +1597,8 @@ var createProviderRegistry = ({
1597
1597
  });
1598
1598
  };
1599
1599
  const reset = () => {
1600
- for (const id2 of Object.keys(providers)) {
1601
- delete providers[id2];
1600
+ for (const id2 of Object.keys(providers2)) {
1601
+ delete providers2[id2];
1602
1602
  }
1603
1603
  };
1604
1604
  const executeProviderByLanguageId = async (languageId, methodName, args, validateResult) => {
@@ -2003,6 +2003,146 @@ var resetOutputChannelRegistry = () => {
2003
2003
  isActivated = false;
2004
2004
  };
2005
2005
 
2006
+ // packages/extension-api/src/parts/SourceControlProviderRegistry/SourceControlProviderRegistry.ts
2007
+ var providers = /* @__PURE__ */ Object.create(null);
2008
+ var optionalMethods = [
2009
+ "acceptInput",
2010
+ "add",
2011
+ "discard",
2012
+ "generateCommitMessage",
2013
+ "getFeatures",
2014
+ "getFileBefore",
2015
+ "getFileDecorations",
2016
+ "getGroups",
2017
+ "isActive"
2018
+ ];
2019
+ var assertOptionalProviderMethod2 = (provider, providerId, methodName) => {
2020
+ if (provider[methodName] !== void 0 && typeof provider[methodName] !== "function") {
2021
+ throw new ExtensionApiError(`source control provider ${providerId} has invalid ${methodName} function`);
2022
+ }
2023
+ };
2024
+ var assertSourceControlProvider = (provider) => {
2025
+ if (!provider) {
2026
+ throw new ExtensionApiError("source control provider is not defined");
2027
+ }
2028
+ const providerRecord = provider;
2029
+ const { id: id2 } = providerRecord;
2030
+ if (typeof id2 !== "string" || id2.length === 0) {
2031
+ throw new ExtensionApiError("source control provider is missing id");
2032
+ }
2033
+ if (typeof providerRecord.getChangedFiles !== "function") {
2034
+ throw new ExtensionApiError(`source control provider ${id2} is missing getChangedFiles function`);
2035
+ }
2036
+ for (const methodName of optionalMethods) {
2037
+ assertOptionalProviderMethod2(providerRecord, id2, methodName);
2038
+ }
2039
+ if (id2 in providers) {
2040
+ throw new ExtensionApiError(`source control provider ${id2} is already registered`);
2041
+ }
2042
+ };
2043
+ var getProvider = (id2) => {
2044
+ const provider = providers[id2];
2045
+ if (!provider) {
2046
+ throw new ExtensionApiError(`source control provider ${id2} not found`);
2047
+ }
2048
+ return provider;
2049
+ };
2050
+ var mapSourceControlProvider = (provider) => {
2051
+ const registeredProvider = {
2052
+ getChangedFiles: () => provider.getChangedFiles(),
2053
+ id: provider.id
2054
+ };
2055
+ if (provider.acceptInput) {
2056
+ registeredProvider.acceptInput = (value) => provider.acceptInput(value);
2057
+ }
2058
+ if (provider.add) {
2059
+ registeredProvider.add = (path) => provider.add(path);
2060
+ }
2061
+ if (provider.discard) {
2062
+ registeredProvider.discard = (path) => provider.discard(path);
2063
+ }
2064
+ if (provider.generateCommitMessage) {
2065
+ registeredProvider.generateCommitMessage = () => provider.generateCommitMessage();
2066
+ }
2067
+ if (provider.getFeatures) {
2068
+ registeredProvider.getFeatures = () => provider.getFeatures();
2069
+ }
2070
+ if (provider.getFileBefore) {
2071
+ registeredProvider.getFileBefore = (uri) => provider.getFileBefore(uri);
2072
+ }
2073
+ if (provider.getFileDecorations) {
2074
+ registeredProvider.getFileDecorations = (uris) => provider.getFileDecorations(uris);
2075
+ }
2076
+ if (provider.getGroups) {
2077
+ registeredProvider.getGroups = (cwd) => provider.getGroups(cwd);
2078
+ }
2079
+ if (provider.isActive) {
2080
+ registeredProvider.isActive = (scheme, root) => provider.isActive(scheme, root);
2081
+ }
2082
+ return registeredProvider;
2083
+ };
2084
+ var registerSourceControlProvider = (provider) => {
2085
+ assertSourceControlProvider(provider);
2086
+ providers[provider.id] = mapSourceControlProvider(provider);
2087
+ return {
2088
+ dispose() {
2089
+ delete providers[provider.id];
2090
+ }
2091
+ };
2092
+ };
2093
+ var executeSourceControlAcceptInput = async (id2, value) => {
2094
+ return getProvider(id2).acceptInput?.(value);
2095
+ };
2096
+ var executeSourceControlAdd = async (id2, path) => {
2097
+ return getProvider(id2).add?.(path);
2098
+ };
2099
+ var executeSourceControlDiscard = async (id2, path) => {
2100
+ return getProvider(id2).discard?.(path);
2101
+ };
2102
+ var executeSourceControlGenerateCommitMessage = async (id2) => {
2103
+ return getProvider(id2).generateCommitMessage?.();
2104
+ };
2105
+ var executeSourceControlGetChangedFiles = async (id2) => {
2106
+ return getProvider(id2).getChangedFiles();
2107
+ };
2108
+ var executeSourceControlGetFeatures = async (id2) => {
2109
+ return getProvider(id2).getFeatures?.() ?? {};
2110
+ };
2111
+ var executeSourceControlGetFileBefore = async (id2, uri) => {
2112
+ return getProvider(id2).getFileBefore?.(uri);
2113
+ };
2114
+ var executeSourceControlGetFileDecorations = async (id2, uris) => {
2115
+ return getProvider(id2).getFileDecorations?.(uris) ?? [];
2116
+ };
2117
+ var executeSourceControlGetGroups = async (id2, cwd) => {
2118
+ const provider = getProvider(id2);
2119
+ if (provider.getGroups) {
2120
+ return provider.getGroups(cwd);
2121
+ }
2122
+ return [
2123
+ {
2124
+ id: "changes",
2125
+ items: await provider.getChangedFiles(),
2126
+ label: "Changes"
2127
+ }
2128
+ ];
2129
+ };
2130
+ var executeSourceControlIsActive = async (id2, scheme, root) => {
2131
+ return Boolean(await getProvider(id2).isActive?.(scheme, root));
2132
+ };
2133
+ var getSourceControlProviderRegistrySnapshot = () => {
2134
+ return {
2135
+ providers: Object.values(providers).map((provider) => ({
2136
+ id: provider.id
2137
+ }))
2138
+ };
2139
+ };
2140
+ var resetSourceControlProviderRegistry = () => {
2141
+ for (const id2 of Object.keys(providers)) {
2142
+ delete providers[id2];
2143
+ }
2144
+ };
2145
+
2006
2146
  // packages/extension-api/node_modules/@lvce-editor/virtual-dom-worker/dist/parts/PatchType/PatchType.js
2007
2147
  var SetText = 1;
2008
2148
  var Replace = 2;
@@ -2398,6 +2538,16 @@ var commandMap = {
2398
2538
  "ExtensionApi.executeFormattingProvider": executeFormattingProvider,
2399
2539
  "ExtensionApi.executeHoverProvider": executeHoverProvider,
2400
2540
  "ExtensionApi.executeResolveCompletionItemProvider": executeResolveCompletionItemProvider,
2541
+ "ExtensionApi.executeSourceControlAcceptInput": executeSourceControlAcceptInput,
2542
+ "ExtensionApi.executeSourceControlAdd": executeSourceControlAdd,
2543
+ "ExtensionApi.executeSourceControlDiscard": executeSourceControlDiscard,
2544
+ "ExtensionApi.executeSourceControlGenerateCommitMessage": executeSourceControlGenerateCommitMessage,
2545
+ "ExtensionApi.executeSourceControlGetChangedFiles": executeSourceControlGetChangedFiles,
2546
+ "ExtensionApi.executeSourceControlGetFeatures": executeSourceControlGetFeatures,
2547
+ "ExtensionApi.executeSourceControlGetFileBefore": executeSourceControlGetFileBefore,
2548
+ "ExtensionApi.executeSourceControlGetFileDecorations": executeSourceControlGetFileDecorations,
2549
+ "ExtensionApi.executeSourceControlGetGroups": executeSourceControlGetGroups,
2550
+ "ExtensionApi.executeSourceControlIsActive": executeSourceControlIsActive,
2401
2551
  "ExtensionApi.executeViewProvider": executeViewProvider,
2402
2552
  "ExtensionApi.getCommandRegistrySnapshot": getCommandRegistrySnapshot,
2403
2553
  "ExtensionApi.getCompletionProviderRegistrySnapshot": getCompletionProviderRegistrySnapshot,
@@ -2405,6 +2555,7 @@ var commandMap = {
2405
2555
  "ExtensionApi.getFormattingProviderRegistrySnapshot": getFormattingProviderRegistrySnapshot,
2406
2556
  "ExtensionApi.getHoverProviderRegistrySnapshot": getHoverProviderRegistrySnapshot,
2407
2557
  "ExtensionApi.getOutputChannelRegistrySnapshot": getOutputChannelRegistrySnapshot,
2558
+ "ExtensionApi.getSourceControlProviderRegistrySnapshot": getSourceControlProviderRegistrySnapshot,
2408
2559
  "ExtensionApi.getStatusBarItems": getStatusBarItems,
2409
2560
  "ExtensionApi.getViewRegistrySnapshot": getViewRegistrySnapshot,
2410
2561
  "ExtensionApi.saveViewInstanceState": saveViewInstanceState
@@ -2488,6 +2639,14 @@ var showQuickPick = async (options) => {
2488
2639
  return ExtensionManagementWorker_exports.invoke("ExtensionHostQuickPick.showQuickPick", options);
2489
2640
  };
2490
2641
 
2642
+ // packages/extension-api/src/parts/Preferences/Preferences.ts
2643
+ var getPreference = async (key) => {
2644
+ return ExtensionManagementWorker_exports.invoke("Extensions.getPreference", key);
2645
+ };
2646
+ var setPreference = async (key, value) => {
2647
+ await ExtensionManagementWorker_exports.invoke("Extensions.setPreference", key, value);
2648
+ };
2649
+
2491
2650
  // packages/extension-api/src/parts/FileSystem/FileSystem.ts
2492
2651
  var MemfsPrefix = "memfs://";
2493
2652
  var isMemory = (uri) => {
@@ -2552,6 +2711,16 @@ export {
2552
2711
  executeFormattingProvider,
2553
2712
  executeHoverProvider,
2554
2713
  executeResolveCompletionItemProvider,
2714
+ executeSourceControlAcceptInput,
2715
+ executeSourceControlAdd,
2716
+ executeSourceControlDiscard,
2717
+ executeSourceControlGenerateCommitMessage,
2718
+ executeSourceControlGetChangedFiles,
2719
+ executeSourceControlGetFeatures,
2720
+ executeSourceControlGetFileBefore,
2721
+ executeSourceControlGetFileDecorations,
2722
+ executeSourceControlGetGroups,
2723
+ executeSourceControlIsActive,
2555
2724
  executeViewProvider,
2556
2725
  exists2 as exists,
2557
2726
  getCompletionProviderRegistrySnapshot,
@@ -2559,6 +2728,7 @@ export {
2559
2728
  getFormattingProviderRegistrySnapshot,
2560
2729
  getHoverProviderRegistrySnapshot,
2561
2730
  getOutputChannelRegistrySnapshot,
2731
+ getPreference,
2562
2732
  getStatusBarItemProviderRegistrySnapshot,
2563
2733
  getViewRegistrySnapshot,
2564
2734
  handleExtensionManagementMessagePort2 as handleExtensionManagementMessagePort,
@@ -2570,6 +2740,7 @@ export {
2570
2740
  registerDiagnosticProvider,
2571
2741
  registerFormattingProvider,
2572
2742
  registerHoverProvider,
2743
+ registerSourceControlProvider,
2573
2744
  registerStatusBarItemProvider,
2574
2745
  registerView,
2575
2746
  remove4 as remove,
@@ -2578,9 +2749,11 @@ export {
2578
2749
  resetFormattingProviderRegistry,
2579
2750
  resetHoverProviderRegistry,
2580
2751
  resetOutputChannelRegistry,
2752
+ resetSourceControlProviderRegistry,
2581
2753
  resetStatusBarItemProviderRegistry,
2582
2754
  resetViewRegistry,
2583
2755
  saveViewInstanceState,
2756
+ setPreference,
2584
2757
  showQuickPick,
2585
2758
  writeFile2 as writeFile
2586
2759
  };
@@ -5,6 +5,19 @@ import { executeFormattingProvider, getFormattingProviderRegistrySnapshot } from
5
5
  import { getStatusBarItems } from "../GetStatusBarItems/GetStatusBarItems.js";
6
6
  import { executeHoverProvider, getHoverProviderRegistrySnapshot } from "../Hover/Hover.js";
7
7
  import { getOutputChannelRegistrySnapshot } from "../OutputChannel/OutputChannel.js";
8
+ import {
9
+ executeSourceControlAcceptInput,
10
+ executeSourceControlAdd,
11
+ executeSourceControlDiscard,
12
+ executeSourceControlGenerateCommitMessage,
13
+ executeSourceControlGetChangedFiles,
14
+ executeSourceControlGetFeatures,
15
+ executeSourceControlGetFileBefore,
16
+ executeSourceControlGetFileDecorations,
17
+ executeSourceControlGetGroups,
18
+ executeSourceControlIsActive,
19
+ getSourceControlProviderRegistrySnapshot
20
+ } from "../SourceControl/SourceControl.js";
8
21
  import {
9
22
  createViewInstance,
10
23
  dispatchViewEvent,
@@ -23,6 +36,16 @@ const commandMap = {
23
36
  "ExtensionApi.executeFormattingProvider": executeFormattingProvider,
24
37
  "ExtensionApi.executeHoverProvider": executeHoverProvider,
25
38
  "ExtensionApi.executeResolveCompletionItemProvider": executeResolveCompletionItemProvider,
39
+ "ExtensionApi.executeSourceControlAcceptInput": executeSourceControlAcceptInput,
40
+ "ExtensionApi.executeSourceControlAdd": executeSourceControlAdd,
41
+ "ExtensionApi.executeSourceControlDiscard": executeSourceControlDiscard,
42
+ "ExtensionApi.executeSourceControlGenerateCommitMessage": executeSourceControlGenerateCommitMessage,
43
+ "ExtensionApi.executeSourceControlGetChangedFiles": executeSourceControlGetChangedFiles,
44
+ "ExtensionApi.executeSourceControlGetFeatures": executeSourceControlGetFeatures,
45
+ "ExtensionApi.executeSourceControlGetFileBefore": executeSourceControlGetFileBefore,
46
+ "ExtensionApi.executeSourceControlGetFileDecorations": executeSourceControlGetFileDecorations,
47
+ "ExtensionApi.executeSourceControlGetGroups": executeSourceControlGetGroups,
48
+ "ExtensionApi.executeSourceControlIsActive": executeSourceControlIsActive,
26
49
  "ExtensionApi.executeViewProvider": executeViewProvider,
27
50
  "ExtensionApi.getCommandRegistrySnapshot": getCommandRegistrySnapshot,
28
51
  "ExtensionApi.getCompletionProviderRegistrySnapshot": getCompletionProviderRegistrySnapshot,
@@ -30,6 +53,7 @@ const commandMap = {
30
53
  "ExtensionApi.getFormattingProviderRegistrySnapshot": getFormattingProviderRegistrySnapshot,
31
54
  "ExtensionApi.getHoverProviderRegistrySnapshot": getHoverProviderRegistrySnapshot,
32
55
  "ExtensionApi.getOutputChannelRegistrySnapshot": getOutputChannelRegistrySnapshot,
56
+ "ExtensionApi.getSourceControlProviderRegistrySnapshot": getSourceControlProviderRegistrySnapshot,
33
57
  "ExtensionApi.getStatusBarItems": getStatusBarItems,
34
58
  "ExtensionApi.getViewRegistrySnapshot": getViewRegistrySnapshot,
35
59
  "ExtensionApi.saveViewInstanceState": saveViewInstanceState
@@ -0,0 +1,11 @@
1
+ import { ExtensionManagementWorker } from "@lvce-editor/rpc-registry";
2
+ const getPreference = async (key) => {
3
+ return ExtensionManagementWorker.invoke("Extensions.getPreference", key);
4
+ };
5
+ const setPreference = async (key, value) => {
6
+ await ExtensionManagementWorker.invoke("Extensions.setPreference", key, value);
7
+ };
8
+ export {
9
+ getPreference,
10
+ setPreference
11
+ };
@@ -0,0 +1,30 @@
1
+ import {
2
+ executeSourceControlAcceptInput,
3
+ executeSourceControlAdd,
4
+ executeSourceControlDiscard,
5
+ executeSourceControlGenerateCommitMessage,
6
+ executeSourceControlGetChangedFiles,
7
+ executeSourceControlGetFeatures,
8
+ executeSourceControlGetFileBefore,
9
+ executeSourceControlGetFileDecorations,
10
+ executeSourceControlGetGroups,
11
+ executeSourceControlIsActive,
12
+ getSourceControlProviderRegistrySnapshot,
13
+ registerSourceControlProvider,
14
+ resetSourceControlProviderRegistry
15
+ } from "../SourceControlProviderRegistry/SourceControlProviderRegistry.js";
16
+ export {
17
+ executeSourceControlAcceptInput,
18
+ executeSourceControlAdd,
19
+ executeSourceControlDiscard,
20
+ executeSourceControlGenerateCommitMessage,
21
+ executeSourceControlGetChangedFiles,
22
+ executeSourceControlGetFeatures,
23
+ executeSourceControlGetFileBefore,
24
+ executeSourceControlGetFileDecorations,
25
+ executeSourceControlGetGroups,
26
+ executeSourceControlIsActive,
27
+ getSourceControlProviderRegistrySnapshot,
28
+ registerSourceControlProvider,
29
+ resetSourceControlProviderRegistry
30
+ };
@@ -0,0 +1,154 @@
1
+ import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
2
+ const providers = /* @__PURE__ */ Object.create(null);
3
+ const optionalMethods = [
4
+ "acceptInput",
5
+ "add",
6
+ "discard",
7
+ "generateCommitMessage",
8
+ "getFeatures",
9
+ "getFileBefore",
10
+ "getFileDecorations",
11
+ "getGroups",
12
+ "isActive"
13
+ ];
14
+ const assertOptionalProviderMethod = (provider, providerId, methodName) => {
15
+ if (provider[methodName] !== void 0 && typeof provider[methodName] !== "function") {
16
+ throw new ExtensionApiError(`source control provider ${providerId} has invalid ${methodName} function`);
17
+ }
18
+ };
19
+ const assertSourceControlProvider = (provider) => {
20
+ if (!provider) {
21
+ throw new ExtensionApiError("source control provider is not defined");
22
+ }
23
+ const providerRecord = provider;
24
+ const { id } = providerRecord;
25
+ if (typeof id !== "string" || id.length === 0) {
26
+ throw new ExtensionApiError("source control provider is missing id");
27
+ }
28
+ if (typeof providerRecord.getChangedFiles !== "function") {
29
+ throw new ExtensionApiError(`source control provider ${id} is missing getChangedFiles function`);
30
+ }
31
+ for (const methodName of optionalMethods) {
32
+ assertOptionalProviderMethod(providerRecord, id, methodName);
33
+ }
34
+ if (id in providers) {
35
+ throw new ExtensionApiError(`source control provider ${id} is already registered`);
36
+ }
37
+ };
38
+ const getProvider = (id) => {
39
+ const provider = providers[id];
40
+ if (!provider) {
41
+ throw new ExtensionApiError(`source control provider ${id} not found`);
42
+ }
43
+ return provider;
44
+ };
45
+ const mapSourceControlProvider = (provider) => {
46
+ const registeredProvider = {
47
+ getChangedFiles: () => provider.getChangedFiles(),
48
+ id: provider.id
49
+ };
50
+ if (provider.acceptInput) {
51
+ registeredProvider.acceptInput = (value) => provider.acceptInput(value);
52
+ }
53
+ if (provider.add) {
54
+ registeredProvider.add = (path) => provider.add(path);
55
+ }
56
+ if (provider.discard) {
57
+ registeredProvider.discard = (path) => provider.discard(path);
58
+ }
59
+ if (provider.generateCommitMessage) {
60
+ registeredProvider.generateCommitMessage = () => provider.generateCommitMessage();
61
+ }
62
+ if (provider.getFeatures) {
63
+ registeredProvider.getFeatures = () => provider.getFeatures();
64
+ }
65
+ if (provider.getFileBefore) {
66
+ registeredProvider.getFileBefore = (uri) => provider.getFileBefore(uri);
67
+ }
68
+ if (provider.getFileDecorations) {
69
+ registeredProvider.getFileDecorations = (uris) => provider.getFileDecorations(uris);
70
+ }
71
+ if (provider.getGroups) {
72
+ registeredProvider.getGroups = (cwd) => provider.getGroups(cwd);
73
+ }
74
+ if (provider.isActive) {
75
+ registeredProvider.isActive = (scheme, root) => provider.isActive(scheme, root);
76
+ }
77
+ return registeredProvider;
78
+ };
79
+ const registerSourceControlProvider = (provider) => {
80
+ assertSourceControlProvider(provider);
81
+ providers[provider.id] = mapSourceControlProvider(provider);
82
+ return {
83
+ dispose() {
84
+ delete providers[provider.id];
85
+ }
86
+ };
87
+ };
88
+ const executeSourceControlAcceptInput = async (id, value) => {
89
+ return getProvider(id).acceptInput?.(value);
90
+ };
91
+ const executeSourceControlAdd = async (id, path) => {
92
+ return getProvider(id).add?.(path);
93
+ };
94
+ const executeSourceControlDiscard = async (id, path) => {
95
+ return getProvider(id).discard?.(path);
96
+ };
97
+ const executeSourceControlGenerateCommitMessage = async (id) => {
98
+ return getProvider(id).generateCommitMessage?.();
99
+ };
100
+ const executeSourceControlGetChangedFiles = async (id) => {
101
+ return getProvider(id).getChangedFiles();
102
+ };
103
+ const executeSourceControlGetFeatures = async (id) => {
104
+ return getProvider(id).getFeatures?.() ?? {};
105
+ };
106
+ const executeSourceControlGetFileBefore = async (id, uri) => {
107
+ return getProvider(id).getFileBefore?.(uri);
108
+ };
109
+ const executeSourceControlGetFileDecorations = async (id, uris) => {
110
+ return getProvider(id).getFileDecorations?.(uris) ?? [];
111
+ };
112
+ const executeSourceControlGetGroups = async (id, cwd) => {
113
+ const provider = getProvider(id);
114
+ if (provider.getGroups) {
115
+ return provider.getGroups(cwd);
116
+ }
117
+ return [
118
+ {
119
+ id: "changes",
120
+ items: await provider.getChangedFiles(),
121
+ label: "Changes"
122
+ }
123
+ ];
124
+ };
125
+ const executeSourceControlIsActive = async (id, scheme, root) => {
126
+ return Boolean(await getProvider(id).isActive?.(scheme, root));
127
+ };
128
+ const getSourceControlProviderRegistrySnapshot = () => {
129
+ return {
130
+ providers: Object.values(providers).map((provider) => ({
131
+ id: provider.id
132
+ }))
133
+ };
134
+ };
135
+ const resetSourceControlProviderRegistry = () => {
136
+ for (const id of Object.keys(providers)) {
137
+ delete providers[id];
138
+ }
139
+ };
140
+ export {
141
+ executeSourceControlAcceptInput,
142
+ executeSourceControlAdd,
143
+ executeSourceControlDiscard,
144
+ executeSourceControlGenerateCommitMessage,
145
+ executeSourceControlGetChangedFiles,
146
+ executeSourceControlGetFeatures,
147
+ executeSourceControlGetFileBefore,
148
+ executeSourceControlGetFileDecorations,
149
+ executeSourceControlGetGroups,
150
+ executeSourceControlIsActive,
151
+ getSourceControlProviderRegistrySnapshot,
152
+ registerSourceControlProvider,
153
+ resetSourceControlProviderRegistry
154
+ };