@lvce-editor/extension-management-worker 4.8.0 → 4.10.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.
@@ -1316,6 +1316,9 @@ const readFile = async uri => {
1316
1316
  const writeFile = async (uri, content) => {
1317
1317
  return invoke$4('FileSystem.writeFile', uri, content);
1318
1318
  };
1319
+ const mkdir = async uri => {
1320
+ return invoke$4('FileSystem.mkdir', uri);
1321
+ };
1319
1322
  const exists = async uri => {
1320
1323
  return invoke$4('FileSystem.exists', uri);
1321
1324
  };
@@ -1747,8 +1750,105 @@ const getWebExtensions = async assetDir => {
1747
1750
  }
1748
1751
  };
1749
1752
 
1753
+ const WorkspaceConfigFolderName = '.lvce';
1754
+ const DisabledExtensionsFileName = 'disabled-extensions.json';
1755
+ const joinUri = (base, ...parts) => {
1756
+ const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;
1757
+ return [normalizedBase, ...parts].join('/');
1758
+ };
1759
+ const stringifyJson = data => {
1760
+ return JSON.stringify(data, null, 2) + '\n';
1761
+ };
1762
+ const getWorkspaceUri = async () => {
1763
+ return invoke$3('Workspace.getPath');
1764
+ };
1765
+ const getWorkspaceConfigDirUri = async () => {
1766
+ const workspaceUri = await getWorkspaceUri();
1767
+ return joinUri(workspaceUri, WorkspaceConfigFolderName);
1768
+ };
1769
+ const getWorkspaceDisabledExtensionsJsonUri = async () => {
1770
+ const configDirUri = await getWorkspaceConfigDirUri();
1771
+ return joinUri(configDirUri, DisabledExtensionsFileName);
1772
+ };
1773
+ const parseDisabledExtensions = content => {
1774
+ const parsed = JSON.parse(content);
1775
+ if (!Array.isArray(parsed.disabledExtensions)) {
1776
+ return [];
1777
+ }
1778
+ return parsed.disabledExtensions.filter(item => typeof item === 'string');
1779
+ };
1780
+ const readDisabledExtensionIdsFromUri = async uri => {
1781
+ const exists$1 = await exists(uri);
1782
+ if (!exists$1) {
1783
+ return [];
1784
+ }
1785
+ const content = await readFile(uri);
1786
+ return parseDisabledExtensions(content);
1787
+ };
1788
+ const readDisabledExtensionIds = async () => {
1789
+ const uri = await getWorkspaceDisabledExtensionsJsonUri();
1790
+ return readDisabledExtensionIdsFromUri(uri);
1791
+ };
1792
+ const readDisabledExtensionIdsSafe = async () => {
1793
+ try {
1794
+ return await readDisabledExtensionIds();
1795
+ } catch {
1796
+ return [];
1797
+ }
1798
+ };
1799
+ const writeDisabledExtensionIds = async (uri, disabledExtensions) => {
1800
+ await writeFile(uri, stringifyJson({
1801
+ disabledExtensions
1802
+ }));
1803
+ };
1804
+ const disableExtension$1 = async id => {
1805
+ string(id);
1806
+ const configDirUri = await getWorkspaceConfigDirUri();
1807
+ const uri = joinUri(configDirUri, DisabledExtensionsFileName);
1808
+ const configDirExists = await exists(configDirUri);
1809
+ if (!configDirExists) {
1810
+ await mkdir(configDirUri);
1811
+ }
1812
+ const oldDisabled = await readDisabledExtensionIdsFromUri(uri);
1813
+ const newDisabled = oldDisabled.includes(id) ? oldDisabled : [...oldDisabled, id];
1814
+ await writeDisabledExtensionIds(uri, newDisabled);
1815
+ };
1816
+ const enableExtension$1 = async id => {
1817
+ string(id);
1818
+ const uri = await getWorkspaceDisabledExtensionsJsonUri();
1819
+ const exists$1 = await exists(uri);
1820
+ if (!exists$1) {
1821
+ return;
1822
+ }
1823
+ const oldDisabled = await readDisabledExtensionIdsFromUri(uri);
1824
+ const newDisabled = oldDisabled.filter(item => item !== id);
1825
+ await writeDisabledExtensionIds(uri, newDisabled);
1826
+ };
1827
+
1750
1828
  /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
1751
1829
 
1830
+ const withWorkspaceDisabledState = (extensions, disabledIds) => {
1831
+ if (disabledIds.length === 0) {
1832
+ return extensions;
1833
+ }
1834
+ const disabledIdsSet = new Set(disabledIds);
1835
+ return extensions.map(extension => {
1836
+ if (!disabledIdsSet.has(extension.id)) {
1837
+ return extension;
1838
+ }
1839
+ return {
1840
+ ...extension,
1841
+ disabled: true
1842
+ };
1843
+ });
1844
+ };
1845
+ const getExtensionsWithWorkspaceState = async extensions => {
1846
+ if (extensions.length === 0) {
1847
+ return extensions;
1848
+ }
1849
+ const workspaceDisabledIds = await readDisabledExtensionIdsSafe();
1850
+ return withWorkspaceDisabledState(extensions, workspaceDisabledIds);
1851
+ };
1752
1852
  const getAllExtensionsWithState = async (extensionsState, assetDir, platform) => {
1753
1853
  if (typeof assetDir !== 'string') {
1754
1854
  assetDir = await invoke$3('Layout.getAssetDir');
@@ -1761,10 +1861,10 @@ const getAllExtensionsWithState = async (extensionsState, assetDir, platform) =>
1761
1861
  const meta = extensionsState.webExtensions;
1762
1862
  if (platform === Web) {
1763
1863
  const webExtensions = await getWebExtensions(assetDir);
1764
- return [...webExtensions, ...meta];
1864
+ return getExtensionsWithWorkspaceState([...webExtensions, ...meta]);
1765
1865
  }
1766
1866
  const local = await invoke$2('ExtensionManagement.getAllExtensions');
1767
- return [...local, ...meta];
1867
+ return getExtensionsWithWorkspaceState([...local, ...meta]);
1768
1868
  };
1769
1869
 
1770
1870
  const getAllExtensions = async (assetDir, platform) => {
@@ -1774,7 +1874,7 @@ const getAllExtensions = async (assetDir, platform) => {
1774
1874
  const activatingExtensions = Object.create(null);
1775
1875
  const runningExtensions = Object.create(null);
1776
1876
  const matchesEvent = (extension, event) => {
1777
- return isExtensionIsolated(extension) && Array.isArray(extension.activation) && extension.activation.includes(event);
1877
+ return !extension.disabled && isExtensionIsolated(extension) && Array.isArray(extension.activation) && extension.activation.includes(event);
1778
1878
  };
1779
1879
  const getExtensionId$2 = extension => {
1780
1880
  return extension.id;
@@ -1803,14 +1903,28 @@ const activateExtension = async (extension, event, assetDir, platform) => {
1803
1903
  await activatingExtensions[extensionId];
1804
1904
  };
1805
1905
  const activateByEvent = async (event, assetDir, platform) => {
1806
- if (event === 'none') {
1807
- await Promise.all(Object.values(activatingExtensions));
1808
- return;
1809
- }
1810
- const extensions = await getAllExtensions(assetDir, platform);
1811
- const matchingExtensions = extensions.filter(extension => matchesEvent(extension, event));
1812
- for (const extension of matchingExtensions) {
1813
- await activateExtension(extension, event, assetDir, platform);
1906
+ try {
1907
+ if (event === 'none') {
1908
+ await Promise.all(Object.values(activatingExtensions));
1909
+ return {
1910
+ error: undefined,
1911
+ hasActivatedExtensions: Object.keys(activatingExtensions).length > 0
1912
+ };
1913
+ }
1914
+ const extensions = await getAllExtensions(assetDir, platform);
1915
+ const matchingExtensions = extensions.filter(extension => matchesEvent(extension, event));
1916
+ for (const extension of matchingExtensions) {
1917
+ await activateExtension(extension, event, assetDir, platform);
1918
+ }
1919
+ return {
1920
+ error: undefined,
1921
+ hasActivatedExtensions: matchingExtensions.length > 0
1922
+ };
1923
+ } catch (error) {
1924
+ return {
1925
+ error: error instanceof Error ? error : new Error(String(error)),
1926
+ hasActivatedExtensions: false
1927
+ };
1814
1928
  }
1815
1929
  };
1816
1930
 
@@ -2019,6 +2133,12 @@ const disableExtension = async (id, isTest) => {
2019
2133
  return disableExtension2(id, oldState.platform);
2020
2134
  };
2021
2135
 
2136
+ const disableWorkspaceExtension = async id => {
2137
+ string(id);
2138
+ await disableExtension$1(id);
2139
+ await invalidateExtensionsCache();
2140
+ };
2141
+
2022
2142
  const enableExtension2 = async (id, platform) => {
2023
2143
  string(id);
2024
2144
  number(platform);
@@ -2046,6 +2166,12 @@ const enableExtension = async (id, isTest) => {
2046
2166
  return enableExtension2(id, oldState.platform);
2047
2167
  };
2048
2168
 
2169
+ const enableWorkspaceExtension = async id => {
2170
+ string(id);
2171
+ await enableExtension$1(id);
2172
+ await invalidateExtensionsCache();
2173
+ };
2174
+
2049
2175
  /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
2050
2176
 
2051
2177
  const getExtensionId$1 = extension => {
@@ -2075,14 +2201,31 @@ const executeRendererCommand = (id, args) => {
2075
2201
  return invoke$3(id, ...args);
2076
2202
  };
2077
2203
  const executeCommand = async (extensionsState, id, ...args) => {
2204
+ const {
2205
+ result,
2206
+ wasFound
2207
+ } = await executeExtensionCommand(extensionsState, id, ...args);
2208
+ if (wasFound) {
2209
+ return result;
2210
+ }
2211
+ return executeRendererCommand(id, args);
2212
+ };
2213
+ const executeExtensionCommand = async (extensionsState, id, ...args) => {
2078
2214
  const {
2079
2215
  platform
2080
2216
  } = extensionsState;
2081
2217
  const rpc = await getRpcForCommand(extensionsState, id, platform);
2082
2218
  if (rpc) {
2083
- return rpc.invoke('ExtensionApi.executeCommand', id, ...args);
2219
+ const result = await rpc.invoke('ExtensionApi.executeCommand', id, ...args);
2220
+ return {
2221
+ result,
2222
+ wasFound: true
2223
+ };
2084
2224
  }
2085
- return executeRendererCommand(id, args);
2225
+ return {
2226
+ result: undefined,
2227
+ wasFound: false
2228
+ };
2086
2229
  };
2087
2230
 
2088
2231
  const getOrigin = () => {
@@ -2768,6 +2911,15 @@ const getLanguages = async (platform, assetDir) => {
2768
2911
  }
2769
2912
  };
2770
2913
 
2914
+ const getPreference = async key => {
2915
+ return invoke$3('Preferences.get', key);
2916
+ };
2917
+ const setPreference = async (key, value) => {
2918
+ await invoke$3('Preferences.update', {
2919
+ [key]: value
2920
+ });
2921
+ };
2922
+
2771
2923
  const sendMessagePortToFileSystemWorker = async port => {
2772
2924
  await sendMessagePortToFileSystemWorker$1(port, 0);
2773
2925
  };
@@ -2793,13 +2945,16 @@ const commandMap = {
2793
2945
  'Extensions.createWebViewWorkerRpc2': createWebViewWorkerRpc2,
2794
2946
  'Extensions.disable': disableExtension,
2795
2947
  'Extensions.disable2': disableExtension2,
2948
+ 'Extensions.disableWorkspace': disableWorkspaceExtension,
2796
2949
  'Extensions.dispatchViewEvent': dispatchViewEvent,
2797
2950
  'Extensions.disposeViewInstance': disposeViewInstance,
2798
2951
  'Extensions.enable': enableExtension,
2799
2952
  'Extensions.enable2': enableExtension2,
2953
+ 'Extensions.enableWorkspace': enableWorkspaceExtension,
2800
2954
  'Extensions.executeCommand': wrapCommand(executeCommand),
2801
2955
  'Extensions.executeCompletionProvider': wrapCommand(executeCompletionProvider),
2802
2956
  'Extensions.executeDiagnosticProvider': wrapCommand(executeDiagnosticProvider),
2957
+ 'Extensions.executeExtensionCommand': wrapCommand(executeExtensionCommand),
2803
2958
  'Extensions.executeFormattingProvider': wrapCommand(executeFormattingProvider),
2804
2959
  'Extensions.executeHoverProvider': wrapCommand(executeHoverProvider),
2805
2960
  'Extensions.executeResolveCompletionItemProvider': wrapCommand(executeResolveCompletionItemProvider),
@@ -2811,6 +2966,7 @@ const commandMap = {
2811
2966
  'Extensions.getDynamicWebExtensions': getDynamicWebExtensions,
2812
2967
  'Extensions.getExtension': getExtension,
2813
2968
  'Extensions.getLanguages': getLanguages,
2969
+ 'Extensions.getPreference': getPreference,
2814
2970
  'Extensions.getRemoteUrlForWebView': getRemoteUrlForWebView,
2815
2971
  'Extensions.getRpcInfo': getRpcInfo,
2816
2972
  'Extensions.getRuntimeStatus': getRuntimeStatus,
@@ -2823,6 +2979,7 @@ const commandMap = {
2823
2979
  'Extensions.invalidateExtensionsCache': invalidateExtensionsCache,
2824
2980
  'Extensions.saveViewInstanceState': saveViewInstanceState,
2825
2981
  'Extensions.sendMessagePortToFileSystemWorker': sendMessagePortToFileSystemWorker,
2982
+ 'Extensions.setPreference': setPreference,
2826
2983
  'Extensions.uninstall': uninstallExtension,
2827
2984
  'StatusBar.handleChange': handleChange
2828
2985
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.8.0",
3
+ "version": "4.10.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"