@lvce-editor/extension-management-worker 3.4.0 → 4.0.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.
@@ -608,7 +608,7 @@ const execute = (command, ...args) => {
608
608
 
609
609
  const Two$1 = '2.0';
610
610
  const callbacks = Object.create(null);
611
- const get$4 = id => {
611
+ const get$5 = id => {
612
612
  return callbacks[id];
613
613
  };
614
614
  const remove$1 = id => {
@@ -757,7 +757,7 @@ const warn$1 = (...args) => {
757
757
  console.warn(...args);
758
758
  };
759
759
  const resolve = (id, response) => {
760
- const fn = get$4(id);
760
+ const fn = get$5(id);
761
761
  if (!fn) {
762
762
  console.log(response);
763
763
  warn$1(`callback ${id} may already be disposed`);
@@ -1215,33 +1215,33 @@ const createMockRpc = ({
1215
1215
  return mockRpc;
1216
1216
  };
1217
1217
 
1218
- const rpcs$1 = Object.create(null);
1219
- const set$6 = (id, rpc) => {
1220
- rpcs$1[id] = rpc;
1218
+ const rpcs$2 = Object.create(null);
1219
+ const set$7 = (id, rpc) => {
1220
+ rpcs$2[id] = rpc;
1221
1221
  };
1222
- const get$3 = id => {
1223
- return rpcs$1[id];
1222
+ const get$4 = id => {
1223
+ return rpcs$2[id];
1224
1224
  };
1225
1225
  const remove = id => {
1226
- delete rpcs$1[id];
1226
+ delete rpcs$2[id];
1227
1227
  };
1228
1228
 
1229
1229
  /* eslint-disable @typescript-eslint/explicit-function-return-type */
1230
1230
  const create$1 = rpcId => {
1231
1231
  return {
1232
1232
  async dispose() {
1233
- const rpc = get$3(rpcId);
1233
+ const rpc = get$4(rpcId);
1234
1234
  await rpc.dispose();
1235
1235
  },
1236
1236
  // @ts-ignore
1237
1237
  invoke(method, ...params) {
1238
- const rpc = get$3(rpcId);
1238
+ const rpc = get$4(rpcId);
1239
1239
  // @ts-ignore
1240
1240
  return rpc.invoke(method, ...params);
1241
1241
  },
1242
1242
  // @ts-ignore
1243
1243
  invokeAndTransfer(method, ...params) {
1244
- const rpc = get$3(rpcId);
1244
+ const rpc = get$4(rpcId);
1245
1245
  // @ts-ignore
1246
1246
  return rpc.invokeAndTransfer(method, ...params);
1247
1247
  },
@@ -1249,7 +1249,7 @@ const create$1 = rpcId => {
1249
1249
  const mockRpc = createMockRpc({
1250
1250
  commandMap
1251
1251
  });
1252
- set$6(rpcId, mockRpc);
1252
+ set$7(rpcId, mockRpc);
1253
1253
  // @ts-ignore
1254
1254
  mockRpc[Symbol.dispose] = () => {
1255
1255
  remove(rpcId);
@@ -1258,7 +1258,7 @@ const create$1 = rpcId => {
1258
1258
  return mockRpc;
1259
1259
  },
1260
1260
  set(rpc) {
1261
- set$6(rpcId, rpc);
1261
+ set$7(rpcId, rpc);
1262
1262
  }
1263
1263
  };
1264
1264
  };
@@ -1274,13 +1274,45 @@ const RendererWorker = 1;
1274
1274
  const SharedProcess = 1492;
1275
1275
 
1276
1276
  const {
1277
+ dispose,
1277
1278
  invoke: invoke$4,
1278
- set: set$5
1279
+ invokeAndTransfer: invokeAndTransfer$2,
1280
+ registerMockRpc,
1281
+ set: set$6
1279
1282
  } = create$1(ExtensionHostWorker);
1283
+ const executeReferenceProvider = async (id, offset) => {
1284
+ // @ts-ignore
1285
+ return invoke$4('ExtensionHostReference.executeReferenceProvider', id, offset);
1286
+ };
1287
+ const executeFileReferenceProvider = async id => {
1288
+ // @ts-ignore
1289
+ return invoke$4('ExtensionHostReference.executeFileReferenceProvider', id);
1290
+ };
1291
+ const getRuntimeStatus$2 = async extensionId => {
1292
+ // @ts-ignore
1293
+ return invoke$4('ExtensionHost.getRuntimeStatus', extensionId);
1294
+ };
1295
+ const getEnabledOutputProviderIds = async () => {
1296
+ const channels = await invoke$4('Output.getEnabledProviders');
1297
+ return channels;
1298
+ };
1299
+
1300
+ const ExtensionHost = {
1301
+ __proto__: null,
1302
+ dispose,
1303
+ executeFileReferenceProvider,
1304
+ executeReferenceProvider,
1305
+ getEnabledOutputProviderIds,
1306
+ getRuntimeStatus: getRuntimeStatus$2,
1307
+ invoke: invoke$4,
1308
+ invokeAndTransfer: invokeAndTransfer$2,
1309
+ registerMockRpc,
1310
+ set: set$6
1311
+ };
1280
1312
 
1281
1313
  const {
1282
1314
  invoke: invoke$3,
1283
- set: set$4
1315
+ set: set$5
1284
1316
  } = create$1(FileSystemWorker);
1285
1317
  const readFile = async uri => {
1286
1318
  return invoke$3('FileSystem.readFile', uri);
@@ -1295,7 +1327,7 @@ const exists = async uri => {
1295
1327
  const {
1296
1328
  invoke: invoke$2,
1297
1329
  invokeAndTransfer: invokeAndTransfer$1,
1298
- set: set$3
1330
+ set: set$4
1299
1331
  } = create$1(RendererWorker);
1300
1332
  const sendMessagePortToIconThemeWorker = async (port, rpcId) => {
1301
1333
  const command = 'IconTheme.handleMessagePort';
@@ -1316,7 +1348,7 @@ const sendMessagePortToSharedProcess = async port => {
1316
1348
 
1317
1349
  const {
1318
1350
  invoke: invoke$1,
1319
- set: set$2
1351
+ set: set$3
1320
1352
  } = create$1(SharedProcess);
1321
1353
 
1322
1354
  const create = () => {
@@ -1364,14 +1396,14 @@ const createEmptyRuntimeStatus = id => {
1364
1396
  };
1365
1397
  };
1366
1398
  let extensionsState = createInitialState();
1367
- const get$2 = () => {
1399
+ const get$3 = () => {
1368
1400
  return extensionsState;
1369
1401
  };
1370
- const set$1 = newState => {
1402
+ const set$2 = newState => {
1371
1403
  extensionsState = newState;
1372
1404
  };
1373
1405
  const update = newState => {
1374
- set$1({
1406
+ set$2({
1375
1407
  ...extensionsState,
1376
1408
  ...newState
1377
1409
  });
@@ -1485,10 +1517,10 @@ const rejectAfterTimeout = async (timeout, token) => {
1485
1517
  }
1486
1518
  throw new Error(`Activation timeout of ${timeout}ms exceeded`);
1487
1519
  };
1488
- const activate = async (extensionId, extension) => {
1489
- await invoke$4('ExtensionHost.activateExtension3', extensionId, extension);
1520
+ const activate = async (extensionId, extension, extensionHost) => {
1521
+ await extensionHost.invoke('ExtensionHost.activateExtension3', extensionId, extension);
1490
1522
  };
1491
- const activateExtension2 = async (extensionId, extension, absolutePath) => {
1523
+ const activateExtension2 = async (extensionId, extension, absolutePath, extensionHost = ExtensionHost) => {
1492
1524
  string(extensionId);
1493
1525
  object(extension);
1494
1526
  string(absolutePath);
@@ -1499,7 +1531,7 @@ const activateExtension2 = async (extensionId, extension, absolutePath) => {
1499
1531
  activationStartTime: startTime,
1500
1532
  status: Activating
1501
1533
  });
1502
- await Promise.race([activate(extensionId, extension), rejectAfterTimeout(activationTimeout, token)]);
1534
+ await Promise.race([activate(extensionId, extension, extensionHost), rejectAfterTimeout(activationTimeout, token)]);
1503
1535
  const endTime = performance.now();
1504
1536
  const time = endTime - startTime;
1505
1537
  updateRuntimeStatus(extensionId, {
@@ -1524,6 +1556,56 @@ const activateExtension2 = async (extensionId, extension, absolutePath) => {
1524
1556
  }
1525
1557
  };
1526
1558
 
1559
+ const commandMapRef = {};
1560
+
1561
+ const getPortTuple = () => {
1562
+ const {
1563
+ port1,
1564
+ port2
1565
+ } = new MessageChannel();
1566
+ return {
1567
+ port1,
1568
+ port2
1569
+ };
1570
+ };
1571
+
1572
+ const rpcs$1 = Object.create(null);
1573
+ const get$2 = extensionId => {
1574
+ return rpcs$1[extensionId];
1575
+ };
1576
+ const set$1 = (extensionId, rpc) => {
1577
+ rpcs$1[extensionId] = rpc;
1578
+ };
1579
+
1580
+ /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
1581
+ const invoke = (method, ...params) => {
1582
+ return invoke$2(method, ...params);
1583
+ };
1584
+ const invokeAndTransfer = (method, ...params) => {
1585
+ return invokeAndTransfer$1(method, ...params);
1586
+ };
1587
+
1588
+ const getOrCreateIsolatedExtensionHostWorker = async extensionId => {
1589
+ const existingRpc = get$2(extensionId);
1590
+ if (existingRpc) {
1591
+ return existingRpc;
1592
+ }
1593
+ const {
1594
+ port1,
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);
1606
+ return rpc;
1607
+ };
1608
+
1527
1609
  const rpcs = Object.create(null);
1528
1610
  const add = (id, rpc) => {
1529
1611
  rpcs[id] = rpc;
@@ -1567,7 +1649,7 @@ const handleRpcInfos = (extension, platform) => {
1567
1649
  }
1568
1650
  };
1569
1651
 
1570
- const importExtension = async (extensionId, absolutePath, activationEvent) => {
1652
+ const importExtension = async (extensionId, absolutePath, activationEvent, extensionHost = ExtensionHost) => {
1571
1653
  try {
1572
1654
  string(absolutePath);
1573
1655
  const startTime = performance.now();
@@ -1583,7 +1665,7 @@ const importExtension = async (extensionId, absolutePath, activationEvent) => {
1583
1665
  status: Importing
1584
1666
  });
1585
1667
  try {
1586
- await invoke$4('ExtensionHost.importExtension2', extensionId, absolutePath);
1668
+ await extensionHost.invoke('ExtensionHost.importExtension2', extensionId, absolutePath);
1587
1669
  const endTime = performance.now();
1588
1670
  const time = endTime - startTime;
1589
1671
  updateRuntimeStatus(extensionId, {
@@ -1615,11 +1697,16 @@ const interExtensionId = path => {
1615
1697
  return path.slice(slashIndex + 1);
1616
1698
  };
1617
1699
 
1700
+ const isExtensionIsolated = extension => {
1701
+ return extension?.isolated === true;
1702
+ };
1703
+
1618
1704
  const activateExtension3 = async (extension, absolutePath, activationEvent, platform) => {
1619
1705
  handleRpcInfos(extension, platform);
1620
1706
  const extensionId = extension.id || interExtensionId(extension.uri);
1621
- await importExtension(extensionId, absolutePath, activationEvent);
1622
- await activateExtension2(extensionId, extension, absolutePath);
1707
+ const extensionHost = isExtensionIsolated(extension) ? await getOrCreateIsolatedExtensionHostWorker(extensionId) : undefined;
1708
+ await importExtension(extensionId, absolutePath, activationEvent, extensionHost);
1709
+ await activateExtension2(extensionId, extension, absolutePath, extensionHost);
1623
1710
  };
1624
1711
 
1625
1712
  const getJson$1 = async url => {
@@ -1667,14 +1754,6 @@ const addWebExtension = async path => {
1667
1754
 
1668
1755
  const ModuleWorkerAndWorkaroundForChromeDevtoolsBug = 6;
1669
1756
 
1670
- /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
1671
- const invoke = (method, ...params) => {
1672
- return invoke$2(method, ...params);
1673
- };
1674
- const invokeAndTransfer = (method, ...params) => {
1675
- return invokeAndTransfer$1(method, ...params);
1676
- };
1677
-
1678
1757
  const createWebViewWorkerRpc2 = async (rpcInfo, port) => {
1679
1758
  // TODO this function is called from the iframe worker to create a direct
1680
1759
  // connection between a webview/iframe and it's webworker. For this to work
@@ -1764,13 +1843,13 @@ const disabledExtensionsCacheKey = '/cache/disabledExtensions.json';
1764
1843
  const disableExtension2$1 = async (id, platform) => {
1765
1844
  const isTest = platform === Test;
1766
1845
  const isWeb = platform === Web;
1767
- const oldState = get$2(); // TODO maybe pass in an application id? Would allow multiple editors with different extensions.
1846
+ const oldState = get$3(); // TODO maybe pass in an application id? Would allow multiple editors with different extensions.
1768
1847
  if (isTest) {
1769
1848
  const newState = {
1770
1849
  ...oldState,
1771
1850
  disabledIds: [...oldState.disabledIds, id]
1772
1851
  };
1773
- set$1(newState);
1852
+ set$2(newState);
1774
1853
  } else if (isWeb) {
1775
1854
  const cached = await getJson(disabledExtensionsCacheKey);
1776
1855
  const oldDisabled = cached?.disabledExtensions || [];
@@ -1786,13 +1865,13 @@ const disableExtension2$1 = async (id, platform) => {
1786
1865
  const enableExtension2$1 = async (id, platform) => {
1787
1866
  const isTest = platform === Test;
1788
1867
  const isWeb = platform === Web;
1789
- const oldState = get$2();
1868
+ const oldState = get$3();
1790
1869
  if (isTest) {
1791
1870
  const newState = {
1792
1871
  ...oldState,
1793
1872
  disabledIds: oldState.disabledIds.filter(existing => existing !== id)
1794
1873
  };
1795
- set$1(newState);
1874
+ set$2(newState);
1796
1875
  } else if (isWeb) {
1797
1876
  const cached = await getJson(disabledExtensionsCacheKey);
1798
1877
  const oldDisabled = cached?.disabledExtensions || [];
@@ -1821,7 +1900,7 @@ const disableExtension2 = async (id, platform) => {
1821
1900
  };
1822
1901
 
1823
1902
  const disableExtension = async (id, isTest) => {
1824
- const oldState = get$2();
1903
+ const oldState = get$3();
1825
1904
  return disableExtension2(id, oldState.platform);
1826
1905
  };
1827
1906
 
@@ -1848,7 +1927,7 @@ const enableExtension2 = async (id, platform) => {
1848
1927
  };
1849
1928
 
1850
1929
  const enableExtension = async (id, isTest) => {
1851
- const oldState = get$2();
1930
+ const oldState = get$3();
1852
1931
  return enableExtension2(id, oldState.platform);
1853
1932
  };
1854
1933
 
@@ -2017,7 +2096,7 @@ const getColorThemeUri = (extensions, colorThemeId) => {
2017
2096
  };
2018
2097
 
2019
2098
  const getDynamicWebExtensions = () => {
2020
- return get$2().webExtensions;
2099
+ return get$3().webExtensions;
2021
2100
  };
2022
2101
 
2023
2102
  const getWebExtensionsUrl = assetDir => {
@@ -2122,17 +2201,6 @@ const getExtension = async (id, assetDir, platform) => {
2122
2201
  return undefined;
2123
2202
  };
2124
2203
 
2125
- const getPortTuple = () => {
2126
- const {
2127
- port1,
2128
- port2
2129
- } = new MessageChannel();
2130
- return {
2131
- port1,
2132
- port2
2133
- };
2134
- };
2135
-
2136
2204
  const createWebViewIpc = async webView => {
2137
2205
  const {
2138
2206
  origin,
@@ -2201,8 +2269,6 @@ const getRuntimeStatus = extensionId => {
2201
2269
  return getRuntimeStatus$1(extensionId) || emptyStatus;
2202
2270
  };
2203
2271
 
2204
- const commandMapRef = {};
2205
-
2206
2272
  const handleMessagePort = async port => {
2207
2273
  await create$8({
2208
2274
  commandMap: commandMapRef,
@@ -2239,7 +2305,7 @@ const getRpc = async platform => {
2239
2305
  const initializeSharedProcess = async platform => {
2240
2306
  const rpc = await getRpc(platform);
2241
2307
  if (rpc) {
2242
- set$2(rpc);
2308
+ set$3(rpc);
2243
2309
  }
2244
2310
  };
2245
2311
 
@@ -2346,7 +2412,7 @@ const initializeExtensionHostWorker = async () => {
2346
2412
  await sendMessagePortToExtensionHostWorker(port, 0);
2347
2413
  }
2348
2414
  });
2349
- set$5(rpc);
2415
+ set$6(rpc);
2350
2416
  };
2351
2417
 
2352
2418
  const initializeFileSystemWorker = async () => {
@@ -2356,7 +2422,7 @@ const initializeFileSystemWorker = async () => {
2356
2422
  await sendMessagePortToFileSystemWorker(port, 0);
2357
2423
  }
2358
2424
  });
2359
- set$4(rpc);
2425
+ set$5(rpc);
2360
2426
  };
2361
2427
 
2362
2428
  const initializeIframeWorker = async () => {
@@ -2373,7 +2439,7 @@ const initializeRendererWorker = async () => {
2373
2439
  const rpc = await create$2({
2374
2440
  commandMap: commandMap
2375
2441
  });
2376
- set$3(rpc);
2442
+ set$4(rpc);
2377
2443
  };
2378
2444
 
2379
2445
  const listen = async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "3.4.0",
3
+ "version": "4.0.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"