@lvce-editor/extension-management-worker 4.8.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
|
};
|
|
@@ -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
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
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
|
-
|
|
2219
|
+
const result = await rpc.invoke('ExtensionApi.executeCommand', id, ...args);
|
|
2220
|
+
return {
|
|
2221
|
+
result,
|
|
2222
|
+
wasFound: true
|
|
2223
|
+
};
|
|
2084
2224
|
}
|
|
2085
|
-
return
|
|
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
|
};
|