@lvce-editor/extension-management-worker 4.7.0 → 4.9.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
  };
@@ -1329,7 +1332,7 @@ const sendMessagePortToIconThemeWorker = async (port, rpcId) => {
1329
1332
  const command = 'IconTheme.handleMessagePort';
1330
1333
  await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToIconThemeWorker', port, command, rpcId);
1331
1334
  };
1332
- const sendMessagePortToFileSystemWorker = async (port, rpcId) => {
1335
+ const sendMessagePortToFileSystemWorker$1 = async (port, rpcId) => {
1333
1336
  const command = 'FileSystem.handleMessagePort';
1334
1337
  await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToFileSystemWorker', port, command, rpcId);
1335
1338
  };
@@ -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,19 @@ 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
+
2923
+ const sendMessagePortToFileSystemWorker = async port => {
2924
+ await sendMessagePortToFileSystemWorker$1(port, 0);
2925
+ };
2926
+
2771
2927
  const uninstallExtension = async () => {
2772
2928
  // TODO
2773
2929
  };
@@ -2789,13 +2945,16 @@ const commandMap = {
2789
2945
  'Extensions.createWebViewWorkerRpc2': createWebViewWorkerRpc2,
2790
2946
  'Extensions.disable': disableExtension,
2791
2947
  'Extensions.disable2': disableExtension2,
2948
+ 'Extensions.disableWorkspace': disableWorkspaceExtension,
2792
2949
  'Extensions.dispatchViewEvent': dispatchViewEvent,
2793
2950
  'Extensions.disposeViewInstance': disposeViewInstance,
2794
2951
  'Extensions.enable': enableExtension,
2795
2952
  'Extensions.enable2': enableExtension2,
2953
+ 'Extensions.enableWorkspace': enableWorkspaceExtension,
2796
2954
  'Extensions.executeCommand': wrapCommand(executeCommand),
2797
2955
  'Extensions.executeCompletionProvider': wrapCommand(executeCompletionProvider),
2798
2956
  'Extensions.executeDiagnosticProvider': wrapCommand(executeDiagnosticProvider),
2957
+ 'Extensions.executeExtensionCommand': wrapCommand(executeExtensionCommand),
2799
2958
  'Extensions.executeFormattingProvider': wrapCommand(executeFormattingProvider),
2800
2959
  'Extensions.executeHoverProvider': wrapCommand(executeHoverProvider),
2801
2960
  'Extensions.executeResolveCompletionItemProvider': wrapCommand(executeResolveCompletionItemProvider),
@@ -2807,6 +2966,7 @@ const commandMap = {
2807
2966
  'Extensions.getDynamicWebExtensions': getDynamicWebExtensions,
2808
2967
  'Extensions.getExtension': getExtension,
2809
2968
  'Extensions.getLanguages': getLanguages,
2969
+ 'Extensions.getPreference': getPreference,
2810
2970
  'Extensions.getRemoteUrlForWebView': getRemoteUrlForWebView,
2811
2971
  'Extensions.getRpcInfo': getRpcInfo,
2812
2972
  'Extensions.getRuntimeStatus': getRuntimeStatus,
@@ -2818,6 +2978,8 @@ const commandMap = {
2818
2978
  'Extensions.install': installExtension,
2819
2979
  'Extensions.invalidateExtensionsCache': invalidateExtensionsCache,
2820
2980
  'Extensions.saveViewInstanceState': saveViewInstanceState,
2981
+ 'Extensions.sendMessagePortToFileSystemWorker': sendMessagePortToFileSystemWorker,
2982
+ 'Extensions.setPreference': setPreference,
2821
2983
  'Extensions.uninstall': uninstallExtension,
2822
2984
  'StatusBar.handleChange': handleChange
2823
2985
  };
@@ -2836,7 +2998,7 @@ const initializeFileSystemWorker = async () => {
2836
2998
  const rpc = await create$6({
2837
2999
  commandMap: commandMapRef,
2838
3000
  async send(port) {
2839
- await sendMessagePortToFileSystemWorker(port, 0);
3001
+ await sendMessagePortToFileSystemWorker$1(port, 0);
2840
3002
  }
2841
3003
  });
2842
3004
  set$7(rpc);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.7.0",
3
+ "version": "4.9.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"