@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
|
-
|
|
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,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);
|