@lvce-editor/extension-management-worker 4.0.0 → 4.2.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.
- package/dist/extensionManagementWorkerMain.js +242 -107
- package/package.json +1 -1
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
const activateByEvent = async () => {
|
|
2
|
-
// TODO
|
|
3
|
-
};
|
|
4
|
-
|
|
5
1
|
class AssertionError extends Error {
|
|
6
2
|
constructor(message) {
|
|
7
3
|
super(message);
|
|
@@ -1216,7 +1212,7 @@ const createMockRpc = ({
|
|
|
1216
1212
|
};
|
|
1217
1213
|
|
|
1218
1214
|
const rpcs$2 = Object.create(null);
|
|
1219
|
-
const set$
|
|
1215
|
+
const set$8 = (id, rpc) => {
|
|
1220
1216
|
rpcs$2[id] = rpc;
|
|
1221
1217
|
};
|
|
1222
1218
|
const get$4 = id => {
|
|
@@ -1249,7 +1245,7 @@ const create$1 = rpcId => {
|
|
|
1249
1245
|
const mockRpc = createMockRpc({
|
|
1250
1246
|
commandMap
|
|
1251
1247
|
});
|
|
1252
|
-
set$
|
|
1248
|
+
set$8(rpcId, mockRpc);
|
|
1253
1249
|
// @ts-ignore
|
|
1254
1250
|
mockRpc[Symbol.dispose] = () => {
|
|
1255
1251
|
remove(rpcId);
|
|
@@ -1258,7 +1254,7 @@ const create$1 = rpcId => {
|
|
|
1258
1254
|
return mockRpc;
|
|
1259
1255
|
},
|
|
1260
1256
|
set(rpc) {
|
|
1261
|
-
set$
|
|
1257
|
+
set$8(rpcId, rpc);
|
|
1262
1258
|
}
|
|
1263
1259
|
};
|
|
1264
1260
|
};
|
|
@@ -1275,25 +1271,25 @@ const SharedProcess = 1492;
|
|
|
1275
1271
|
|
|
1276
1272
|
const {
|
|
1277
1273
|
dispose,
|
|
1278
|
-
invoke: invoke$
|
|
1274
|
+
invoke: invoke$5,
|
|
1279
1275
|
invokeAndTransfer: invokeAndTransfer$2,
|
|
1280
1276
|
registerMockRpc,
|
|
1281
|
-
set: set$
|
|
1277
|
+
set: set$7
|
|
1282
1278
|
} = create$1(ExtensionHostWorker);
|
|
1283
1279
|
const executeReferenceProvider = async (id, offset) => {
|
|
1284
1280
|
// @ts-ignore
|
|
1285
|
-
return invoke$
|
|
1281
|
+
return invoke$5('ExtensionHostReference.executeReferenceProvider', id, offset);
|
|
1286
1282
|
};
|
|
1287
1283
|
const executeFileReferenceProvider = async id => {
|
|
1288
1284
|
// @ts-ignore
|
|
1289
|
-
return invoke$
|
|
1285
|
+
return invoke$5('ExtensionHostReference.executeFileReferenceProvider', id);
|
|
1290
1286
|
};
|
|
1291
1287
|
const getRuntimeStatus$2 = async extensionId => {
|
|
1292
1288
|
// @ts-ignore
|
|
1293
|
-
return invoke$
|
|
1289
|
+
return invoke$5('ExtensionHost.getRuntimeStatus', extensionId);
|
|
1294
1290
|
};
|
|
1295
1291
|
const getEnabledOutputProviderIds = async () => {
|
|
1296
|
-
const channels = await invoke$
|
|
1292
|
+
const channels = await invoke$5('Output.getEnabledProviders');
|
|
1297
1293
|
return channels;
|
|
1298
1294
|
};
|
|
1299
1295
|
|
|
@@ -1304,30 +1300,30 @@ const ExtensionHost = {
|
|
|
1304
1300
|
executeReferenceProvider,
|
|
1305
1301
|
getEnabledOutputProviderIds,
|
|
1306
1302
|
getRuntimeStatus: getRuntimeStatus$2,
|
|
1307
|
-
invoke: invoke$
|
|
1303
|
+
invoke: invoke$5,
|
|
1308
1304
|
invokeAndTransfer: invokeAndTransfer$2,
|
|
1309
1305
|
registerMockRpc,
|
|
1310
|
-
set: set$
|
|
1306
|
+
set: set$7
|
|
1311
1307
|
};
|
|
1312
1308
|
|
|
1313
1309
|
const {
|
|
1314
|
-
invoke: invoke$
|
|
1315
|
-
set: set$
|
|
1310
|
+
invoke: invoke$4,
|
|
1311
|
+
set: set$6
|
|
1316
1312
|
} = create$1(FileSystemWorker);
|
|
1317
1313
|
const readFile = async uri => {
|
|
1318
|
-
return invoke$
|
|
1314
|
+
return invoke$4('FileSystem.readFile', uri);
|
|
1319
1315
|
};
|
|
1320
1316
|
const writeFile = async (uri, content) => {
|
|
1321
|
-
return invoke$
|
|
1317
|
+
return invoke$4('FileSystem.writeFile', uri, content);
|
|
1322
1318
|
};
|
|
1323
1319
|
const exists = async uri => {
|
|
1324
|
-
return invoke$
|
|
1320
|
+
return invoke$4('FileSystem.exists', uri);
|
|
1325
1321
|
};
|
|
1326
1322
|
|
|
1327
1323
|
const {
|
|
1328
|
-
invoke: invoke$
|
|
1324
|
+
invoke: invoke$3,
|
|
1329
1325
|
invokeAndTransfer: invokeAndTransfer$1,
|
|
1330
|
-
set: set$
|
|
1326
|
+
set: set$5
|
|
1331
1327
|
} = create$1(RendererWorker);
|
|
1332
1328
|
const sendMessagePortToIconThemeWorker = async (port, rpcId) => {
|
|
1333
1329
|
const command = 'IconTheme.handleMessagePort';
|
|
@@ -1347,8 +1343,8 @@ const sendMessagePortToSharedProcess = async port => {
|
|
|
1347
1343
|
};
|
|
1348
1344
|
|
|
1349
1345
|
const {
|
|
1350
|
-
invoke: invoke$
|
|
1351
|
-
set: set$
|
|
1346
|
+
invoke: invoke$2,
|
|
1347
|
+
set: set$4
|
|
1352
1348
|
} = create$1(SharedProcess);
|
|
1353
1349
|
|
|
1354
1350
|
const create = () => {
|
|
@@ -1399,11 +1395,11 @@ let extensionsState = createInitialState();
|
|
|
1399
1395
|
const get$3 = () => {
|
|
1400
1396
|
return extensionsState;
|
|
1401
1397
|
};
|
|
1402
|
-
const set$
|
|
1398
|
+
const set$3 = newState => {
|
|
1403
1399
|
extensionsState = newState;
|
|
1404
1400
|
};
|
|
1405
1401
|
const update = newState => {
|
|
1406
|
-
set$
|
|
1402
|
+
set$3({
|
|
1407
1403
|
...extensionsState,
|
|
1408
1404
|
...newState
|
|
1409
1405
|
});
|
|
@@ -1452,7 +1448,7 @@ const baseName = path => {
|
|
|
1452
1448
|
const slashIndex = path.lastIndexOf('/');
|
|
1453
1449
|
return path.slice(slashIndex + 1);
|
|
1454
1450
|
};
|
|
1455
|
-
const getExtensionId = extension => {
|
|
1451
|
+
const getExtensionId$2 = extension => {
|
|
1456
1452
|
if (extension && extension.id) {
|
|
1457
1453
|
return extension.id;
|
|
1458
1454
|
}
|
|
@@ -1540,7 +1536,7 @@ const activateExtension2 = async (extensionId, extension, absolutePath, extensio
|
|
|
1540
1536
|
status: Activated
|
|
1541
1537
|
});
|
|
1542
1538
|
} catch (error) {
|
|
1543
|
-
const id = getExtensionId(extension);
|
|
1539
|
+
const id = getExtensionId$2(extension);
|
|
1544
1540
|
if (isImportError(error)) {
|
|
1545
1541
|
const actualErrorMessage = await tryToGetActualImportErrorMessage(absolutePath, error);
|
|
1546
1542
|
throw new Error(`Failed to activate extension ${id}: ${actualErrorMessage}`, {
|
|
@@ -1558,51 +1554,41 @@ const activateExtension2 = async (extensionId, extension, absolutePath, extensio
|
|
|
1558
1554
|
|
|
1559
1555
|
const commandMapRef = {};
|
|
1560
1556
|
|
|
1561
|
-
const getPortTuple = () => {
|
|
1562
|
-
const {
|
|
1563
|
-
port1,
|
|
1564
|
-
port2
|
|
1565
|
-
} = new MessageChannel();
|
|
1566
|
-
return {
|
|
1567
|
-
port1,
|
|
1568
|
-
port2
|
|
1569
|
-
};
|
|
1570
|
-
};
|
|
1571
|
-
|
|
1572
1557
|
const rpcs$1 = Object.create(null);
|
|
1573
1558
|
const get$2 = extensionId => {
|
|
1574
1559
|
return rpcs$1[extensionId];
|
|
1575
1560
|
};
|
|
1576
|
-
const
|
|
1561
|
+
const getAll = () => {
|
|
1562
|
+
return Object.values(rpcs$1);
|
|
1563
|
+
};
|
|
1564
|
+
const set$2 = (extensionId, rpc) => {
|
|
1577
1565
|
rpcs$1[extensionId] = rpc;
|
|
1578
1566
|
};
|
|
1579
1567
|
|
|
1580
1568
|
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
1581
|
-
const invoke = (method, ...params) => {
|
|
1582
|
-
return invoke$
|
|
1569
|
+
const invoke$1 = (method, ...params) => {
|
|
1570
|
+
return invoke$3(method, ...params);
|
|
1583
1571
|
};
|
|
1584
1572
|
const invokeAndTransfer = (method, ...params) => {
|
|
1585
1573
|
return invokeAndTransfer$1(method, ...params);
|
|
1586
1574
|
};
|
|
1587
1575
|
|
|
1588
|
-
const
|
|
1576
|
+
const createIsolatedExtensionHostWorker = async (extensionId, absolutePath, createRpc, invokeAndTransfer) => {
|
|
1577
|
+
return createRpc({
|
|
1578
|
+
commandMap: commandMapRef,
|
|
1579
|
+
isMessagePortOpen: true,
|
|
1580
|
+
send(port) {
|
|
1581
|
+
return invokeAndTransfer('LaunchIsolatedExtensionHostWorker.launchIsolatedExtensionHostWorker', port, extensionId, absolutePath);
|
|
1582
|
+
}
|
|
1583
|
+
});
|
|
1584
|
+
};
|
|
1585
|
+
const getOrCreateIsolatedExtensionHostWorker = async (extensionId, absolutePath) => {
|
|
1589
1586
|
const existingRpc = get$2(extensionId);
|
|
1590
1587
|
if (existingRpc) {
|
|
1591
1588
|
return existingRpc;
|
|
1592
1589
|
}
|
|
1593
|
-
const
|
|
1594
|
-
|
|
1595
|
-
port2
|
|
1596
|
-
} = getPortTuple();
|
|
1597
|
-
const rpcPromise = create$3({
|
|
1598
|
-
commandMap: commandMapRef,
|
|
1599
|
-
isMessagePortOpen: true,
|
|
1600
|
-
messagePort: port2
|
|
1601
|
-
});
|
|
1602
|
-
port2.start();
|
|
1603
|
-
await invokeAndTransfer('LaunchIsolatedExtensionHostWorker.launchIsolatedExtensionHostWorker', port1, extensionId);
|
|
1604
|
-
const rpc = await rpcPromise;
|
|
1605
|
-
set$1(extensionId, rpc);
|
|
1590
|
+
const rpc = await createIsolatedExtensionHostWorker(extensionId, absolutePath, create$7, invokeAndTransfer);
|
|
1591
|
+
set$2(extensionId, rpc);
|
|
1606
1592
|
return rpc;
|
|
1607
1593
|
};
|
|
1608
1594
|
|
|
@@ -1704,9 +1690,38 @@ const isExtensionIsolated = extension => {
|
|
|
1704
1690
|
const activateExtension3 = async (extension, absolutePath, activationEvent, platform) => {
|
|
1705
1691
|
handleRpcInfos(extension, platform);
|
|
1706
1692
|
const extensionId = extension.id || interExtensionId(extension.uri);
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1693
|
+
if (isExtensionIsolated(extension)) {
|
|
1694
|
+
await getOrCreateIsolatedExtensionHostWorker(extensionId, absolutePath);
|
|
1695
|
+
return;
|
|
1696
|
+
}
|
|
1697
|
+
await importExtension(extensionId, absolutePath, activationEvent);
|
|
1698
|
+
await activateExtension2(extensionId, extension, absolutePath);
|
|
1699
|
+
};
|
|
1700
|
+
|
|
1701
|
+
const getExtensionAbsolutePath = (id, isWeb, isBuiltin, path, relativePath, origin, platform, assetDir) => {
|
|
1702
|
+
if (path.startsWith('http')) {
|
|
1703
|
+
if (path.endsWith('/')) {
|
|
1704
|
+
return new URL(relativePath, path).toString();
|
|
1705
|
+
}
|
|
1706
|
+
return new URL(relativePath, path + '/').toString();
|
|
1707
|
+
}
|
|
1708
|
+
if (!path.startsWith('/')) {
|
|
1709
|
+
path = '/' + path;
|
|
1710
|
+
}
|
|
1711
|
+
if (isWeb) {
|
|
1712
|
+
return path + '/' + relativePath;
|
|
1713
|
+
}
|
|
1714
|
+
if (platform === Web) {
|
|
1715
|
+
return path + '/' + relativePath;
|
|
1716
|
+
}
|
|
1717
|
+
if (isBuiltin) {
|
|
1718
|
+
return `${assetDir}/extensions/${id}/${relativePath}`;
|
|
1719
|
+
}
|
|
1720
|
+
return new URL('/remote' + path + '/' + relativePath, origin).toString();
|
|
1721
|
+
};
|
|
1722
|
+
|
|
1723
|
+
const getDynamicWebExtensions = () => {
|
|
1724
|
+
return get$3().webExtensions;
|
|
1710
1725
|
};
|
|
1711
1726
|
|
|
1712
1727
|
const getJson$1 = async url => {
|
|
@@ -1722,6 +1737,74 @@ const getJson$1 = async url => {
|
|
|
1722
1737
|
}
|
|
1723
1738
|
};
|
|
1724
1739
|
|
|
1740
|
+
const getWebExtensionsUrl = assetDir => {
|
|
1741
|
+
return `${assetDir}/config/extensions.json`;
|
|
1742
|
+
};
|
|
1743
|
+
|
|
1744
|
+
const getWebExtensions = async assetDir => {
|
|
1745
|
+
try {
|
|
1746
|
+
return await getJson$1(getWebExtensionsUrl(assetDir));
|
|
1747
|
+
} catch {
|
|
1748
|
+
return [];
|
|
1749
|
+
}
|
|
1750
|
+
};
|
|
1751
|
+
|
|
1752
|
+
const getAllExtensions = async (assetDir, platform) => {
|
|
1753
|
+
if (typeof assetDir !== 'string') {
|
|
1754
|
+
assetDir = await invoke$3('Layout.getAssetDir');
|
|
1755
|
+
}
|
|
1756
|
+
if (!platform) {
|
|
1757
|
+
platform = await invoke$3('Layout.getPlatform');
|
|
1758
|
+
}
|
|
1759
|
+
string(assetDir);
|
|
1760
|
+
number(platform);
|
|
1761
|
+
const meta = getDynamicWebExtensions();
|
|
1762
|
+
if (platform === Web) {
|
|
1763
|
+
const webExtensions = await getWebExtensions(assetDir);
|
|
1764
|
+
return [...webExtensions, ...meta];
|
|
1765
|
+
}
|
|
1766
|
+
const local = await invoke$2('ExtensionManagement.getAllExtensions');
|
|
1767
|
+
return [...local, ...meta];
|
|
1768
|
+
};
|
|
1769
|
+
|
|
1770
|
+
const activatingExtensions = Object.create(null);
|
|
1771
|
+
const runningExtensions = Object.create(null);
|
|
1772
|
+
const matchesEvent = (extension, event) => {
|
|
1773
|
+
return isExtensionIsolated(extension) && Array.isArray(extension.activation) && extension.activation.includes(event);
|
|
1774
|
+
};
|
|
1775
|
+
const getExtensionId$1 = extension => {
|
|
1776
|
+
return extension.id;
|
|
1777
|
+
};
|
|
1778
|
+
const getAbsolutePath = (extension, assetDir, platform) => {
|
|
1779
|
+
return getExtensionAbsolutePath(extension.id, extension.isWeb, extension.builtin, extension.uri || extension.path, extension.browser, globalThis.location.origin, platform, assetDir);
|
|
1780
|
+
};
|
|
1781
|
+
const activateExtension = async (extension, event, assetDir, platform) => {
|
|
1782
|
+
const extensionId = getExtensionId$1(extension);
|
|
1783
|
+
if (runningExtensions[extensionId]) {
|
|
1784
|
+
return;
|
|
1785
|
+
}
|
|
1786
|
+
if (!Object.hasOwn(activatingExtensions, extensionId)) {
|
|
1787
|
+
const absolutePath = getAbsolutePath(extension, assetDir, platform);
|
|
1788
|
+
activatingExtensions[extensionId] = activateExtension3(extension, absolutePath, event, platform).then(() => {
|
|
1789
|
+
runningExtensions[extensionId] = true;
|
|
1790
|
+
}).finally(() => {
|
|
1791
|
+
delete activatingExtensions[extensionId];
|
|
1792
|
+
});
|
|
1793
|
+
}
|
|
1794
|
+
await activatingExtensions[extensionId];
|
|
1795
|
+
};
|
|
1796
|
+
const activateByEvent = async (event, assetDir, platform) => {
|
|
1797
|
+
if (event === 'none') {
|
|
1798
|
+
await Promise.all(Object.values(activatingExtensions));
|
|
1799
|
+
return;
|
|
1800
|
+
}
|
|
1801
|
+
const extensions = await getAllExtensions(assetDir, platform);
|
|
1802
|
+
const matchingExtensions = extensions.filter(extension => matchesEvent(extension, event));
|
|
1803
|
+
for (const extension of matchingExtensions) {
|
|
1804
|
+
await activateExtension(extension, event, assetDir, platform);
|
|
1805
|
+
}
|
|
1806
|
+
};
|
|
1807
|
+
|
|
1725
1808
|
const getWebExtensionManifest = async (path, manifestPath) => {
|
|
1726
1809
|
try {
|
|
1727
1810
|
const manifest = await getJson$1(manifestPath);
|
|
@@ -1741,6 +1824,24 @@ const getWebManifestPath = path => {
|
|
|
1741
1824
|
return manifestPath;
|
|
1742
1825
|
};
|
|
1743
1826
|
|
|
1827
|
+
let rpc;
|
|
1828
|
+
const set$1 = value => {
|
|
1829
|
+
rpc = value;
|
|
1830
|
+
};
|
|
1831
|
+
const invoke = async (method, ...params) => {
|
|
1832
|
+
if (!rpc) {
|
|
1833
|
+
return undefined;
|
|
1834
|
+
}
|
|
1835
|
+
return rpc.invoke(method, ...params);
|
|
1836
|
+
};
|
|
1837
|
+
|
|
1838
|
+
const handleChange = async id => {
|
|
1839
|
+
await invoke('StatusBar.handleChange', id);
|
|
1840
|
+
};
|
|
1841
|
+
|
|
1842
|
+
const hasStatusBarItems = manifest => {
|
|
1843
|
+
return Array.isArray(manifest.statusBarItems) && manifest.statusBarItems.length > 0;
|
|
1844
|
+
};
|
|
1744
1845
|
const addWebExtension = async path => {
|
|
1745
1846
|
if (hasWebExtensionUri(path)) {
|
|
1746
1847
|
return undefined;
|
|
@@ -1749,6 +1850,9 @@ const addWebExtension = async path => {
|
|
|
1749
1850
|
const manifest = await getWebExtensionManifest(path, manifestPath);
|
|
1750
1851
|
addWebExtension$1(manifest);
|
|
1751
1852
|
clearCachedExtensions();
|
|
1853
|
+
if (hasStatusBarItems(manifest)) {
|
|
1854
|
+
await handleChange(manifest.id || path);
|
|
1855
|
+
}
|
|
1752
1856
|
return manifest;
|
|
1753
1857
|
};
|
|
1754
1858
|
|
|
@@ -1849,7 +1953,7 @@ const disableExtension2$1 = async (id, platform) => {
|
|
|
1849
1953
|
...oldState,
|
|
1850
1954
|
disabledIds: [...oldState.disabledIds, id]
|
|
1851
1955
|
};
|
|
1852
|
-
set$
|
|
1956
|
+
set$3(newState);
|
|
1853
1957
|
} else if (isWeb) {
|
|
1854
1958
|
const cached = await getJson(disabledExtensionsCacheKey);
|
|
1855
1959
|
const oldDisabled = cached?.disabledExtensions || [];
|
|
@@ -1859,7 +1963,7 @@ const disableExtension2$1 = async (id, platform) => {
|
|
|
1859
1963
|
};
|
|
1860
1964
|
await setJson(disabledExtensionsCacheKey, newData);
|
|
1861
1965
|
} else {
|
|
1862
|
-
await invoke$
|
|
1966
|
+
await invoke$2('ExtensionManagement.disable', id);
|
|
1863
1967
|
}
|
|
1864
1968
|
};
|
|
1865
1969
|
const enableExtension2$1 = async (id, platform) => {
|
|
@@ -1871,7 +1975,7 @@ const enableExtension2$1 = async (id, platform) => {
|
|
|
1871
1975
|
...oldState,
|
|
1872
1976
|
disabledIds: oldState.disabledIds.filter(existing => existing !== id)
|
|
1873
1977
|
};
|
|
1874
|
-
set$
|
|
1978
|
+
set$3(newState);
|
|
1875
1979
|
} else if (isWeb) {
|
|
1876
1980
|
const cached = await getJson(disabledExtensionsCacheKey);
|
|
1877
1981
|
const oldDisabled = cached?.disabledExtensions || [];
|
|
@@ -1884,7 +1988,7 @@ const enableExtension2$1 = async (id, platform) => {
|
|
|
1884
1988
|
};
|
|
1885
1989
|
|
|
1886
1990
|
const invalidateExtensionsCache = async () => {
|
|
1887
|
-
await invoke$
|
|
1991
|
+
await invoke$3('ExtensionManagement.invalidateExtensionsCache');
|
|
1888
1992
|
};
|
|
1889
1993
|
|
|
1890
1994
|
const disableExtension2 = async (id, platform) => {
|
|
@@ -1908,7 +2012,7 @@ const enableExtension2 = async (id, platform) => {
|
|
|
1908
2012
|
string(id);
|
|
1909
2013
|
number(platform);
|
|
1910
2014
|
if (platform === Remote || platform === Electron) {
|
|
1911
|
-
const disabledExtensionsJsonPath = await invoke$
|
|
2015
|
+
const disabledExtensionsJsonPath = await invoke$3('WebView.compatSharedProcessInvoke', 'PlatformPaths.getDisabledExtensionsJsonUri');
|
|
1912
2016
|
const exists$1 = await exists(disabledExtensionsJsonPath);
|
|
1913
2017
|
if (!exists$1) {
|
|
1914
2018
|
return undefined;
|
|
@@ -1931,6 +2035,43 @@ const enableExtension = async (id, isTest) => {
|
|
|
1931
2035
|
return enableExtension2(id, oldState.platform);
|
|
1932
2036
|
};
|
|
1933
2037
|
|
|
2038
|
+
const getExtensionId = extension => {
|
|
2039
|
+
return extension.id || interExtensionId(extension.uri || extension.path || '');
|
|
2040
|
+
};
|
|
2041
|
+
const contributesCommand = (extension, id) => {
|
|
2042
|
+
return Array.isArray(extension.commands) && extension.commands.some(command => command.id === id);
|
|
2043
|
+
};
|
|
2044
|
+
const getContributingExtension = async (id, platform) => {
|
|
2045
|
+
const extensions = await getAllExtensions('', platform);
|
|
2046
|
+
return extensions.find(extension => isExtensionIsolated(extension) && contributesCommand(extension, id));
|
|
2047
|
+
};
|
|
2048
|
+
const getRpcForCommand = async (id, platform) => {
|
|
2049
|
+
const extension = await getContributingExtension(id, platform);
|
|
2050
|
+
if (!extension) {
|
|
2051
|
+
return undefined;
|
|
2052
|
+
}
|
|
2053
|
+
const extensionId = getExtensionId(extension);
|
|
2054
|
+
const existingRpc = get$2(extensionId);
|
|
2055
|
+
if (existingRpc) {
|
|
2056
|
+
return existingRpc;
|
|
2057
|
+
}
|
|
2058
|
+
await activateByEvent(`onCommand:${id}`, '', platform);
|
|
2059
|
+
return get$2(extensionId);
|
|
2060
|
+
};
|
|
2061
|
+
const executeRendererCommand = (id, args) => {
|
|
2062
|
+
return invoke$3(id, ...args);
|
|
2063
|
+
};
|
|
2064
|
+
const executeCommand = async (id, ...args) => {
|
|
2065
|
+
const {
|
|
2066
|
+
platform
|
|
2067
|
+
} = get$3();
|
|
2068
|
+
const rpc = await getRpcForCommand(id, platform);
|
|
2069
|
+
if (rpc) {
|
|
2070
|
+
return rpc.invoke('ExtensionApi.executeCommand', id, ...args);
|
|
2071
|
+
}
|
|
2072
|
+
return executeRendererCommand(id, args);
|
|
2073
|
+
};
|
|
2074
|
+
|
|
1934
2075
|
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
1935
2076
|
const warn = (...args) => {
|
|
1936
2077
|
console.warn(...args);
|
|
@@ -2072,7 +2213,7 @@ const getColorThemeCssCached = async (colorThemeId, platform, getData) => {
|
|
|
2072
2213
|
};
|
|
2073
2214
|
|
|
2074
2215
|
const readJson = url => {
|
|
2075
|
-
return invoke$
|
|
2216
|
+
return invoke$3('FileSystem.readJson', url);
|
|
2076
2217
|
};
|
|
2077
2218
|
|
|
2078
2219
|
const join = (pathSeparator, ...parts) => {
|
|
@@ -2095,40 +2236,6 @@ const getColorThemeUri = (extensions, colorThemeId) => {
|
|
|
2095
2236
|
return '';
|
|
2096
2237
|
};
|
|
2097
2238
|
|
|
2098
|
-
const getDynamicWebExtensions = () => {
|
|
2099
|
-
return get$3().webExtensions;
|
|
2100
|
-
};
|
|
2101
|
-
|
|
2102
|
-
const getWebExtensionsUrl = assetDir => {
|
|
2103
|
-
return `${assetDir}/config/extensions.json`;
|
|
2104
|
-
};
|
|
2105
|
-
|
|
2106
|
-
const getWebExtensions = async assetDir => {
|
|
2107
|
-
try {
|
|
2108
|
-
return await getJson$1(getWebExtensionsUrl(assetDir));
|
|
2109
|
-
} catch {
|
|
2110
|
-
return [];
|
|
2111
|
-
}
|
|
2112
|
-
};
|
|
2113
|
-
|
|
2114
|
-
const getAllExtensions = async (assetDir, platform) => {
|
|
2115
|
-
if (typeof assetDir !== 'string') {
|
|
2116
|
-
assetDir = await invoke$2('Layout.getAssetDir');
|
|
2117
|
-
}
|
|
2118
|
-
if (!platform) {
|
|
2119
|
-
platform = await invoke$2('Layout.getPlatform');
|
|
2120
|
-
}
|
|
2121
|
-
string(assetDir);
|
|
2122
|
-
number(platform);
|
|
2123
|
-
const meta = getDynamicWebExtensions();
|
|
2124
|
-
if (platform === Web) {
|
|
2125
|
-
const webExtensions = await getWebExtensions(assetDir);
|
|
2126
|
-
return [...webExtensions, ...meta];
|
|
2127
|
-
}
|
|
2128
|
-
const local = await invoke$1('ExtensionManagement.getAllExtensions');
|
|
2129
|
-
return [...local, ...meta];
|
|
2130
|
-
};
|
|
2131
|
-
|
|
2132
2239
|
const getColorThemeJson$2 = async (colorThemeId, assetDir, platform) => {
|
|
2133
2240
|
const extensions = await getAllExtensions(assetDir, platform);
|
|
2134
2241
|
const colorThemeUri = getColorThemeUri(extensions, colorThemeId);
|
|
@@ -2201,6 +2308,17 @@ const getExtension = async (id, assetDir, platform) => {
|
|
|
2201
2308
|
return undefined;
|
|
2202
2309
|
};
|
|
2203
2310
|
|
|
2311
|
+
const getPortTuple = () => {
|
|
2312
|
+
const {
|
|
2313
|
+
port1,
|
|
2314
|
+
port2
|
|
2315
|
+
} = new MessageChannel();
|
|
2316
|
+
return {
|
|
2317
|
+
port1,
|
|
2318
|
+
port2
|
|
2319
|
+
};
|
|
2320
|
+
};
|
|
2321
|
+
|
|
2204
2322
|
const createWebViewIpc = async webView => {
|
|
2205
2323
|
const {
|
|
2206
2324
|
origin,
|
|
@@ -2241,7 +2359,7 @@ const getRemoteUrlForWebView = async (uri, options = {}) => {
|
|
|
2241
2359
|
if (!webView) {
|
|
2242
2360
|
throw new Error(`webview ${options.webViewId} not found`);
|
|
2243
2361
|
}
|
|
2244
|
-
const [rpc, blob] = await Promise.all([createWebViewIpc(webView), invoke('FileSystem.getBlob', uri)]);
|
|
2362
|
+
const [rpc, blob] = await Promise.all([createWebViewIpc(webView), invoke$1('FileSystem.getBlob', uri)]);
|
|
2245
2363
|
const objectUrl = await rpc.invoke('createObjectUrl', blob);
|
|
2246
2364
|
return objectUrl;
|
|
2247
2365
|
};
|
|
@@ -2269,11 +2387,25 @@ const getRuntimeStatus = extensionId => {
|
|
|
2269
2387
|
return getRuntimeStatus$1(extensionId) || emptyStatus;
|
|
2270
2388
|
};
|
|
2271
2389
|
|
|
2272
|
-
const
|
|
2273
|
-
|
|
2390
|
+
const getItems = async rpc => {
|
|
2391
|
+
return rpc.invoke('ExtensionApi.getStatusBarItems');
|
|
2392
|
+
};
|
|
2393
|
+
const getStatusBarItems = async () => {
|
|
2394
|
+
const rpcs = getAll();
|
|
2395
|
+
const results = await Promise.all(rpcs.map(getItems));
|
|
2396
|
+
return results.flat();
|
|
2397
|
+
};
|
|
2398
|
+
|
|
2399
|
+
const StatusBarWorker = 200;
|
|
2400
|
+
|
|
2401
|
+
const handleMessagePort = async (port, rpcId) => {
|
|
2402
|
+
const rpc = await create$8({
|
|
2274
2403
|
commandMap: commandMapRef,
|
|
2275
2404
|
messagePort: port
|
|
2276
2405
|
});
|
|
2406
|
+
if (rpcId === StatusBarWorker) {
|
|
2407
|
+
set$1(rpc);
|
|
2408
|
+
}
|
|
2277
2409
|
};
|
|
2278
2410
|
|
|
2279
2411
|
const getRpcRemote = async () => {
|
|
@@ -2305,7 +2437,7 @@ const getRpc = async platform => {
|
|
|
2305
2437
|
const initializeSharedProcess = async platform => {
|
|
2306
2438
|
const rpc = await getRpc(platform);
|
|
2307
2439
|
if (rpc) {
|
|
2308
|
-
set$
|
|
2440
|
+
set$4(rpc);
|
|
2309
2441
|
}
|
|
2310
2442
|
};
|
|
2311
2443
|
|
|
@@ -2386,6 +2518,7 @@ const commandMap = {
|
|
|
2386
2518
|
'Extensions.disable2': disableExtension2,
|
|
2387
2519
|
'Extensions.enable': enableExtension,
|
|
2388
2520
|
'Extensions.enable2': enableExtension2,
|
|
2521
|
+
'Extensions.executeCommand': executeCommand,
|
|
2389
2522
|
'Extensions.getAllExtensions': getAllExtensions,
|
|
2390
2523
|
'Extensions.getColorThemeCss': getColorThemeCss,
|
|
2391
2524
|
'Extensions.getColorThemeCssFromJson': getColorThemeCssFromJson,
|
|
@@ -2397,12 +2530,14 @@ const commandMap = {
|
|
|
2397
2530
|
'Extensions.getRemoteUrlForWebView': getRemoteUrlForWebView,
|
|
2398
2531
|
'Extensions.getRpcInfo': getRpcInfo,
|
|
2399
2532
|
'Extensions.getRuntimeStatus': getRuntimeStatus,
|
|
2533
|
+
'Extensions.getStatusBarItems': getStatusBarItems,
|
|
2400
2534
|
'Extensions.handleMessagePort': handleMessagePort,
|
|
2401
2535
|
'Extensions.importExtension': importExtension,
|
|
2402
2536
|
'Extensions.initialize': initialize,
|
|
2403
2537
|
'Extensions.install': installExtension,
|
|
2404
2538
|
'Extensions.invalidateExtensionsCache': invalidateExtensionsCache,
|
|
2405
|
-
'Extensions.uninstall': uninstallExtension
|
|
2539
|
+
'Extensions.uninstall': uninstallExtension,
|
|
2540
|
+
'StatusBar.handleChange': handleChange
|
|
2406
2541
|
};
|
|
2407
2542
|
|
|
2408
2543
|
const initializeExtensionHostWorker = async () => {
|
|
@@ -2412,7 +2547,7 @@ const initializeExtensionHostWorker = async () => {
|
|
|
2412
2547
|
await sendMessagePortToExtensionHostWorker(port, 0);
|
|
2413
2548
|
}
|
|
2414
2549
|
});
|
|
2415
|
-
set$
|
|
2550
|
+
set$7(rpc);
|
|
2416
2551
|
};
|
|
2417
2552
|
|
|
2418
2553
|
const initializeFileSystemWorker = async () => {
|
|
@@ -2422,7 +2557,7 @@ const initializeFileSystemWorker = async () => {
|
|
|
2422
2557
|
await sendMessagePortToFileSystemWorker(port, 0);
|
|
2423
2558
|
}
|
|
2424
2559
|
});
|
|
2425
|
-
set$
|
|
2560
|
+
set$6(rpc);
|
|
2426
2561
|
};
|
|
2427
2562
|
|
|
2428
2563
|
const initializeIframeWorker = async () => {
|
|
@@ -2439,7 +2574,7 @@ const initializeRendererWorker = async () => {
|
|
|
2439
2574
|
const rpc = await create$2({
|
|
2440
2575
|
commandMap: commandMap
|
|
2441
2576
|
});
|
|
2442
|
-
set$
|
|
2577
|
+
set$5(rpc);
|
|
2443
2578
|
};
|
|
2444
2579
|
|
|
2445
2580
|
const listen = async () => {
|