@lvce-editor/extension-management-worker 4.51.0 → 4.52.1

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.
@@ -546,7 +546,7 @@ const waitForWebSocketToBeOpen = webSocket => {
546
546
  open: Open
547
547
  });
548
548
  };
549
- const create$c = async ({
549
+ const create$d = async ({
550
550
  webSocket
551
551
  }) => {
552
552
  const firstWebSocketEvent = await waitForWebSocketToBeOpen(webSocket);
@@ -583,7 +583,7 @@ const wrap = webSocket => {
583
583
  };
584
584
  const IpcParentWithWebSocket$1 = {
585
585
  __proto__: null,
586
- create: create$c,
586
+ create: create$d,
587
587
  wrap
588
588
  };
589
589
 
@@ -863,7 +863,7 @@ const getErrorResponse = (id, error, preparePrettyError, logError) => {
863
863
  const errorProperty = getErrorProperty(error, prettyError);
864
864
  return create$1$1(id, errorProperty);
865
865
  };
866
- const create$b = (message, result) => {
866
+ const create$c = (message, result) => {
867
867
  return {
868
868
  id: message.id,
869
869
  jsonrpc: Two$1,
@@ -872,7 +872,7 @@ const create$b = (message, result) => {
872
872
  };
873
873
  const getSuccessResponse = (message, result) => {
874
874
  const resultProperty = result ?? null;
875
- return create$b(message, resultProperty);
875
+ return create$c(message, resultProperty);
876
876
  };
877
877
  const getErrorResponseSimple = (id, error) => {
878
878
  return {
@@ -966,7 +966,7 @@ const handleJsonRpcMessage = async (...args) => {
966
966
 
967
967
  const Two = '2.0';
968
968
 
969
- const create$a = (method, params) => {
969
+ const create$b = (method, params) => {
970
970
  return {
971
971
  jsonrpc: Two,
972
972
  method,
@@ -974,7 +974,7 @@ const create$a = (method, params) => {
974
974
  };
975
975
  };
976
976
 
977
- const create$9 = (id, method, params) => {
977
+ const create$a = (id, method, params) => {
978
978
  const message = {
979
979
  id,
980
980
  jsonrpc: Two,
@@ -985,12 +985,12 @@ const create$9 = (id, method, params) => {
985
985
  };
986
986
 
987
987
  let id = 0;
988
- const create$8 = () => {
988
+ const create$9 = () => {
989
989
  return ++id;
990
990
  };
991
991
 
992
992
  const registerPromise = map => {
993
- const id = create$8();
993
+ const id = create$9();
994
994
  const {
995
995
  promise,
996
996
  resolve
@@ -1007,7 +1007,7 @@ const invokeHelper = async (callbacks, ipc, method, params, useSendAndTransfer)
1007
1007
  id,
1008
1008
  promise
1009
1009
  } = registerPromise(callbacks);
1010
- const message = create$9(id, method, params);
1010
+ const message = create$a(id, method, params);
1011
1011
  if (useSendAndTransfer && ipc.sendAndTransfer) {
1012
1012
  ipc.sendAndTransfer(message);
1013
1013
  } else {
@@ -1043,7 +1043,7 @@ const createRpc = ipc => {
1043
1043
  * @deprecated
1044
1044
  */
1045
1045
  send(method, ...params) {
1046
- const message = create$a(method, params);
1046
+ const message = create$b(method, params);
1047
1047
  ipc.send(message);
1048
1048
  }
1049
1049
  };
@@ -1083,7 +1083,7 @@ const listen$1 = async (module, options) => {
1083
1083
  return ipc;
1084
1084
  };
1085
1085
 
1086
- const create$7 = async ({
1086
+ const create$8 = async ({
1087
1087
  commandMap,
1088
1088
  isMessagePortOpen = true,
1089
1089
  messagePort
@@ -1101,7 +1101,7 @@ const create$7 = async ({
1101
1101
  return rpc;
1102
1102
  };
1103
1103
 
1104
- const create$6 = async ({
1104
+ const create$7 = async ({
1105
1105
  commandMap,
1106
1106
  isMessagePortOpen,
1107
1107
  send
@@ -1111,7 +1111,7 @@ const create$6 = async ({
1111
1111
  port2
1112
1112
  } = new MessageChannel();
1113
1113
  await send(port1);
1114
- return create$7({
1114
+ return create$8({
1115
1115
  commandMap,
1116
1116
  isMessagePortOpen,
1117
1117
  messagePort: port2
@@ -1146,13 +1146,13 @@ const createSharedLazyRpc = factory => {
1146
1146
  };
1147
1147
  };
1148
1148
 
1149
- const create$5 = async ({
1149
+ const create$6 = async ({
1150
1150
  commandMap,
1151
1151
  isMessagePortOpen,
1152
1152
  send
1153
1153
  }) => {
1154
1154
  return createSharedLazyRpc(() => {
1155
- return create$6({
1155
+ return create$7({
1156
1156
  commandMap,
1157
1157
  isMessagePortOpen,
1158
1158
  send
@@ -1180,7 +1180,7 @@ const getProtocol = () => {
1180
1180
  return location.protocol;
1181
1181
  };
1182
1182
 
1183
- const create$4 = async ({
1183
+ const create$5 = async ({
1184
1184
  commandMap,
1185
1185
  webSocket
1186
1186
  }) => {
@@ -1212,7 +1212,7 @@ const connect = async ({
1212
1212
  }) => {
1213
1213
  const webSocket = new WebSocket(wsUrl);
1214
1214
  try {
1215
- const rpc = await create$4({
1215
+ const rpc = await create$5({
1216
1216
  commandMap,
1217
1217
  webSocket
1218
1218
  });
@@ -1225,7 +1225,7 @@ const connect = async ({
1225
1225
  throw error;
1226
1226
  }
1227
1227
  };
1228
- const create$3 = async ({
1228
+ const create$4 = async ({
1229
1229
  commandMap,
1230
1230
  onClose,
1231
1231
  type
@@ -1254,7 +1254,7 @@ const create$3 = async ({
1254
1254
  return connection.rpc;
1255
1255
  };
1256
1256
 
1257
- const create$2 = async ({
1257
+ const create$3 = async ({
1258
1258
  commandMap,
1259
1259
  isMessagePortOpen,
1260
1260
  messagePort
@@ -1271,7 +1271,7 @@ const create$2 = async ({
1271
1271
  return rpc;
1272
1272
  };
1273
1273
 
1274
- const create$1 = async ({
1274
+ const create$2 = async ({
1275
1275
  commandMap
1276
1276
  }) => {
1277
1277
  // TODO create a commandMap per rpc instance
@@ -1302,19 +1302,19 @@ const createMockRpc = ({
1302
1302
  return mockRpc;
1303
1303
  };
1304
1304
 
1305
- const rpcs$2 = Object.create(null);
1305
+ const rpcs$3 = Object.create(null);
1306
1306
  const set$a = (id, rpc) => {
1307
- rpcs$2[id] = rpc;
1307
+ rpcs$3[id] = rpc;
1308
1308
  };
1309
1309
  const get$6 = id => {
1310
- return rpcs$2[id];
1310
+ return rpcs$3[id];
1311
1311
  };
1312
1312
  const remove$2 = id => {
1313
- delete rpcs$2[id];
1313
+ delete rpcs$3[id];
1314
1314
  };
1315
1315
 
1316
1316
  /* eslint-disable @typescript-eslint/explicit-function-return-type */
1317
- const create = rpcId => {
1317
+ const create$1 = rpcId => {
1318
1318
  return {
1319
1319
  async dispose() {
1320
1320
  const rpc = get$6(rpcId);
@@ -1351,9 +1351,9 @@ const create = rpcId => {
1351
1351
  };
1352
1352
 
1353
1353
  const {
1354
- invoke: invoke$5,
1354
+ invoke: invoke$6,
1355
1355
  set: set$9
1356
- } = create(6010);
1356
+ } = create$1(6010);
1357
1357
 
1358
1358
  const Web = 1;
1359
1359
  const Electron = 2;
@@ -1366,32 +1366,32 @@ const RendererWorker = 1;
1366
1366
  const SharedProcess = 1492;
1367
1367
 
1368
1368
  const {
1369
- invoke: invoke$4,
1369
+ invoke: invoke$5,
1370
1370
  set: set$8
1371
- } = create(ErrorWorker);
1371
+ } = create$1(ErrorWorker);
1372
1372
 
1373
1373
  const {
1374
- invoke: invoke$3,
1374
+ invoke: invoke$4,
1375
1375
  set: set$7
1376
- } = create(FileSystemWorker);
1376
+ } = create$1(FileSystemWorker);
1377
1377
  const readFile$1 = async uri => {
1378
- return invoke$3('FileSystem.readFile', uri);
1378
+ return invoke$4('FileSystem.readFile', uri);
1379
1379
  };
1380
1380
  const writeFile = async (uri, content) => {
1381
- return invoke$3('FileSystem.writeFile', uri, content);
1381
+ return invoke$4('FileSystem.writeFile', uri, content);
1382
1382
  };
1383
1383
  const mkdir = async uri => {
1384
- return invoke$3('FileSystem.mkdir', uri);
1384
+ return invoke$4('FileSystem.mkdir', uri);
1385
1385
  };
1386
1386
  const exists = async uri => {
1387
- return invoke$3('FileSystem.exists', uri);
1387
+ return invoke$4('FileSystem.exists', uri);
1388
1388
  };
1389
1389
 
1390
1390
  const {
1391
- invoke: invoke$2,
1391
+ invoke: invoke$3,
1392
1392
  invokeAndTransfer: invokeAndTransfer$1,
1393
1393
  set: set$6
1394
- } = create(RendererWorker);
1394
+ } = create$1(RendererWorker);
1395
1395
  const sendMessagePortToAuthWorker = async (port, rpcId) => {
1396
1396
  const command = 'HandleMessagePort.handleMessagePort';
1397
1397
  await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToAuthWorker', port, command, rpcId);
@@ -1414,9 +1414,9 @@ const sendMessagePortToSharedProcess = async port => {
1414
1414
  };
1415
1415
 
1416
1416
  const {
1417
- invoke: invoke$1,
1417
+ invoke: invoke$2,
1418
1418
  set: set$5
1419
- } = create(SharedProcess);
1419
+ } = create$1(SharedProcess);
1420
1420
 
1421
1421
  const None = 0;
1422
1422
  const Activating = 2;
@@ -1450,18 +1450,18 @@ const createEmptyRuntimeStatus = id => {
1450
1450
  status: None
1451
1451
  };
1452
1452
  };
1453
- const state = {
1453
+ const state$1 = {
1454
1454
  extensionsState: createInitialState()
1455
1455
  };
1456
1456
  const get$5 = () => {
1457
- return state.extensionsState;
1457
+ return state$1.extensionsState;
1458
1458
  };
1459
1459
  const set$4 = newState => {
1460
- state.extensionsState = newState;
1460
+ state$1.extensionsState = newState;
1461
1461
  };
1462
1462
  const update = newState => {
1463
1463
  set$4({
1464
- ...state.extensionsState,
1464
+ ...state$1.extensionsState,
1465
1465
  ...newState
1466
1466
  });
1467
1467
  };
@@ -1471,11 +1471,11 @@ const setPlatform = platform => {
1471
1471
  });
1472
1472
  };
1473
1473
  const hasWebExtensionUri = uri => {
1474
- return state.extensionsState.webExtensions.some(extension => extension.uri === uri);
1474
+ return state$1.extensionsState.webExtensions.some(extension => extension.uri === uri);
1475
1475
  };
1476
1476
  const addExtension$1 = extension => {
1477
1477
  update({
1478
- webExtensions: [...state.extensionsState.webExtensions, extension]
1478
+ webExtensions: [...state$1.extensionsState.webExtensions, extension]
1479
1479
  });
1480
1480
  };
1481
1481
  const clearCachedExtensions = () => {
@@ -1486,7 +1486,7 @@ const clearCachedExtensions = () => {
1486
1486
  const setRuntimeStatus = status => {
1487
1487
  update({
1488
1488
  runtimeStatuses: {
1489
- ...state.extensionsState.runtimeStatuses,
1489
+ ...state$1.extensionsState.runtimeStatuses,
1490
1490
  [status.id]: {
1491
1491
  ...status
1492
1492
  }
@@ -1494,7 +1494,7 @@ const setRuntimeStatus = status => {
1494
1494
  });
1495
1495
  };
1496
1496
  const updateRuntimeStatus = (id, statusUpdate) => {
1497
- const previousStatus = state.extensionsState.runtimeStatuses[id] || createEmptyRuntimeStatus(id);
1497
+ const previousStatus = state$1.extensionsState.runtimeStatuses[id] || createEmptyRuntimeStatus(id);
1498
1498
  setRuntimeStatus({
1499
1499
  ...previousStatus,
1500
1500
  ...statusUpdate,
@@ -1502,7 +1502,7 @@ const updateRuntimeStatus = (id, statusUpdate) => {
1502
1502
  });
1503
1503
  };
1504
1504
  const getRuntimeStatus$1 = extensionId => {
1505
- return state.extensionsState.runtimeStatuses[extensionId];
1505
+ return state$1.extensionsState.runtimeStatuses[extensionId];
1506
1506
  };
1507
1507
  const omit = (record, id) => {
1508
1508
  const result = {
@@ -1513,9 +1513,9 @@ const omit = (record, id) => {
1513
1513
  };
1514
1514
  const resetExtensionRuntimeState = extensionId => {
1515
1515
  update({
1516
- activatedExtensions: omit(state.extensionsState.activatedExtensions, extensionId),
1517
- cachedActivationEvents: omit(state.extensionsState.cachedActivationEvents, extensionId),
1518
- runtimeStatuses: omit(state.extensionsState.runtimeStatuses, extensionId)
1516
+ activatedExtensions: omit(state$1.extensionsState.activatedExtensions, extensionId),
1517
+ cachedActivationEvents: omit(state$1.extensionsState.cachedActivationEvents, extensionId),
1518
+ runtimeStatuses: omit(state$1.extensionsState.runtimeStatuses, extensionId)
1519
1519
  });
1520
1520
  };
1521
1521
 
@@ -1528,17 +1528,6 @@ const getErrorMessage = error => {
1528
1528
 
1529
1529
  const commandMapRef = {};
1530
1530
 
1531
- const extensionIds = new Set();
1532
- const register = extensionId => {
1533
- extensionIds.add(extensionId);
1534
- };
1535
- const unregister = extensionId => {
1536
- extensionIds.delete(extensionId);
1537
- };
1538
- const getRegisteredExtensionIds = () => {
1539
- return [...extensionIds];
1540
- };
1541
-
1542
1531
  const extensions = Object.create(null);
1543
1532
  const get$4 = extensionId => {
1544
1533
  return extensions[extensionId];
@@ -1565,7 +1554,7 @@ const toFileSystemPath = path => {
1565
1554
  };
1566
1555
  const getExtensionRoot = async extension => {
1567
1556
  if (extension.builtin) {
1568
- const builtinExtensionsPath = await invoke$2('PlatformPaths.getBuiltinExtensionsPath');
1557
+ const builtinExtensionsPath = await invoke$3('PlatformPaths.getBuiltinExtensionsPath');
1569
1558
  if (typeof builtinExtensionsPath !== 'string') {
1570
1559
  throw new TypeError('builtin extensions path must be a string');
1571
1560
  }
@@ -1595,6 +1584,9 @@ const getNodeRpcInfo = async (extensionId, rpcId) => {
1595
1584
  if (!extension) {
1596
1585
  throw new Error(`Extension ${extensionId} has no declared rpcs`);
1597
1586
  }
1587
+ if (!extension.builtin) {
1588
+ throw new Error(`Node rpc ${rpcId} is only available to built-in extensions`);
1589
+ }
1598
1590
  const rpc = getDeclaredNodeRpc(extension, rpcId);
1599
1591
  const extensionRoot = await getExtensionRoot(extension);
1600
1592
  return {
@@ -1603,6 +1595,111 @@ const getNodeRpcInfo = async (extensionId, rpcId) => {
1603
1595
  };
1604
1596
  };
1605
1597
 
1598
+ const isMissingRendererCommand = (error, command) => {
1599
+ const moduleName = command.slice(0, command.indexOf('.'));
1600
+ return error instanceof Error && (error.message.includes(command) || error.message.includes(`module ${moduleName} not found`)) && /command not found|not found/i.test(error.message);
1601
+ };
1602
+ const createLegacyConnection = () => ({
1603
+ type: 'legacy-proxy'
1604
+ });
1605
+ const createNodeRpcConnection = async (extensionId, rpcId) => {
1606
+ const {
1607
+ path
1608
+ } = await getNodeRpcInfo(extensionId, rpcId);
1609
+ const {
1610
+ platform
1611
+ } = get$5();
1612
+ if (platform === Remote) {
1613
+ try {
1614
+ const connectionInfo = await invoke$3('ExtensionNodeRpc.createConnection', extensionId, rpcId, path);
1615
+ return {
1616
+ ...connectionInfo,
1617
+ type: 'websocket'
1618
+ };
1619
+ } catch (error) {
1620
+ if (isMissingRendererCommand(error, 'ExtensionNodeRpc.createConnection')) {
1621
+ return createLegacyConnection();
1622
+ }
1623
+ throw error;
1624
+ }
1625
+ }
1626
+ if (platform === Electron) {
1627
+ try {
1628
+ const supported = await invoke$3('ExtensionNodeRpc.supportsDirectConnection');
1629
+ return supported ? {
1630
+ type: 'message-port'
1631
+ } : createLegacyConnection();
1632
+ } catch (error) {
1633
+ if (isMissingRendererCommand(error, 'ExtensionNodeRpc.supportsDirectConnection')) {
1634
+ return createLegacyConnection();
1635
+ }
1636
+ throw error;
1637
+ }
1638
+ }
1639
+ throw new Error('Node rpc is not available on this platform');
1640
+ };
1641
+ const createNodeRpcMessagePort = async (extensionId, rpcId, port) => {
1642
+ const {
1643
+ platform
1644
+ } = get$5();
1645
+ if (platform !== Electron) {
1646
+ throw new Error('Node rpc message ports are only available in Electron');
1647
+ }
1648
+ const {
1649
+ path
1650
+ } = await getNodeRpcInfo(extensionId, rpcId);
1651
+ await invokeAndTransfer$1('ExtensionNodeRpc.createMessagePort', port, path);
1652
+ };
1653
+
1654
+ const extensionIds = new Set();
1655
+ const register = extensionId => {
1656
+ extensionIds.add(extensionId);
1657
+ };
1658
+ const unregister = extensionId => {
1659
+ extensionIds.delete(extensionId);
1660
+ };
1661
+ const getRegisteredExtensionIds = () => {
1662
+ return [...extensionIds];
1663
+ };
1664
+
1665
+ const rpcs$2 = new Map();
1666
+ const state = {
1667
+ nextId: 0
1668
+ };
1669
+ const getRpc$2 = (extensionId, id) => {
1670
+ const rpc = rpcs$2.get(id);
1671
+ if (!rpc || rpc.extensionId !== extensionId) {
1672
+ throw new Error(`Node rpc ${id} not found`);
1673
+ }
1674
+ return rpc;
1675
+ };
1676
+ const create = async (extensionId, rpcId) => {
1677
+ const {
1678
+ name,
1679
+ path
1680
+ } = await getNodeRpcInfo(extensionId, rpcId);
1681
+ const rendererRpcId = await invoke$3('ExtensionNodeRpc.create', name, path);
1682
+ const id = ++state.nextId;
1683
+ rpcs$2.set(id, {
1684
+ extensionId,
1685
+ rendererRpcId
1686
+ });
1687
+ return id;
1688
+ };
1689
+ const invoke$1 = async (extensionId, id, method, ...params) => {
1690
+ const {
1691
+ rendererRpcId
1692
+ } = getRpc$2(extensionId, id);
1693
+ return invoke$3('ExtensionNodeRpc.invoke', rendererRpcId, method, ...params);
1694
+ };
1695
+ const dispose = async (extensionId, id) => {
1696
+ const {
1697
+ rendererRpcId
1698
+ } = getRpc$2(extensionId, id);
1699
+ rpcs$2.delete(id);
1700
+ await invoke$3('ExtensionNodeRpc.dispose', rendererRpcId);
1701
+ };
1702
+
1606
1703
  const cacheName$1 = 'ExtensionSecrets';
1607
1704
  const getRequestUrl = (extensionId, key) => {
1608
1705
  return `https://secret-storage.invalid/${encodeURIComponent(extensionId)}/${encodeURIComponent(key)}`;
@@ -1614,7 +1711,7 @@ const deleteSecret = async (extensionId, key) => {
1614
1711
  string(extensionId);
1615
1712
  string(key);
1616
1713
  if (isElectron()) {
1617
- await invoke$1('SecretStorage.delete', extensionId, key);
1714
+ await invoke$2('SecretStorage.delete', extensionId, key);
1618
1715
  return;
1619
1716
  }
1620
1717
  const cache = await caches.open(cacheName$1);
@@ -1624,7 +1721,7 @@ const getSecret = async (extensionId, key) => {
1624
1721
  string(extensionId);
1625
1722
  string(key);
1626
1723
  if (isElectron()) {
1627
- return invoke$1('SecretStorage.get', extensionId, key);
1724
+ return invoke$2('SecretStorage.get', extensionId, key);
1628
1725
  }
1629
1726
  const cache = await caches.open(cacheName$1);
1630
1727
  const response = await cache.match(getRequestUrl(extensionId, key));
@@ -1635,7 +1732,7 @@ const storeSecret = async (extensionId, key, value) => {
1635
1732
  string(key);
1636
1733
  string(value);
1637
1734
  if (isElectron()) {
1638
- await invoke$1('SecretStorage.store', extensionId, key, value);
1735
+ await invoke$2('SecretStorage.store', extensionId, key, value);
1639
1736
  return;
1640
1737
  }
1641
1738
  const cache = await caches.open(cacheName$1);
@@ -1650,21 +1747,55 @@ class CommandNotFoundError extends Error {
1650
1747
  });
1651
1748
  }
1652
1749
  }
1750
+ const allowedElectronPortCommand = 'HandleMessagePortForEmbedsProcess.handleMessagePortForEmbedsProcess';
1751
+ const privilegedCommandPrefixes = ['ElectronNet.', 'ClipBoard.', 'DebugSharedProcess.', 'Developer.', 'Electron', 'Exec.', 'ExtensionNodeRpc.', 'FileSystem', 'FileWatcher.', 'IpcParent.', 'PlatformPaths.', 'PersistentFileHandle.', 'Process.', 'RebuildNodePty.', 'SearchProcess.', 'SendMessagePort', 'SharedProcess.', 'TerminalProcess.', 'Transferrable.', 'WebSocketCapability.', 'WebView.compat'];
1752
+ const invokeGlobalCommand = (method, ...params) => {
1753
+ const command = commandMapRef[method];
1754
+ if (!command) {
1755
+ throw new CommandNotFoundError(method);
1756
+ }
1757
+ return command(...params);
1758
+ };
1759
+ const executeCommand$1 = (id, ...args) => {
1760
+ if (privilegedCommandPrefixes.some(prefix => id.startsWith(prefix))) {
1761
+ throw new Error(`Isolated extensions cannot execute privileged command ${id}`);
1762
+ }
1763
+ return invokeGlobalCommand('Extensions.executeCommand', id, ...args);
1764
+ };
1653
1765
  const createExtensionCommandMap = extensionId => {
1654
1766
  return {
1655
1767
  ...commandMapRef,
1768
+ 'Extensions.createLegacyNodeRpc'(rpcId) {
1769
+ return create(extensionId, rpcId);
1770
+ },
1771
+ 'Extensions.createNodeRpcConnection'(rpcId) {
1772
+ return createNodeRpcConnection(extensionId, rpcId);
1773
+ },
1774
+ 'Extensions.createNodeRpcMessagePort'(rpcId, port) {
1775
+ return createNodeRpcMessagePort(extensionId, rpcId, port);
1776
+ },
1656
1777
  'Extensions.deleteSecret'(key) {
1657
1778
  return deleteSecret(extensionId, key);
1658
1779
  },
1659
- 'Extensions.getNodeRpcInfo'(rpcId) {
1660
- return getNodeRpcInfo(extensionId, rpcId);
1780
+ 'Extensions.disposeLegacyNodeRpc'(id) {
1781
+ return dispose(extensionId, id);
1661
1782
  },
1783
+ 'Extensions.executeCommand': executeCommand$1,
1662
1784
  'Extensions.getSecret'(key) {
1663
1785
  return getSecret(extensionId, key);
1664
1786
  },
1787
+ 'Extensions.invokeLegacyNodeRpc'(id, method, ...params) {
1788
+ return invoke$1(extensionId, id, method, ...params);
1789
+ },
1665
1790
  'Extensions.registerFileChangeHandler'() {
1666
1791
  register(extensionId);
1667
1792
  },
1793
+ 'Extensions.sendMessagePortToElectron'(port, initialCommand) {
1794
+ if (initialCommand !== allowedElectronPortCommand) {
1795
+ throw new Error(`Isolated extensions cannot send a port using ${initialCommand}`);
1796
+ }
1797
+ return invokeGlobalCommand('Extensions.sendMessagePortToElectron', port, initialCommand);
1798
+ },
1668
1799
  'Extensions.storeSecret'(key, value) {
1669
1800
  return storeSecret(extensionId, key, value);
1670
1801
  },
@@ -1701,7 +1832,7 @@ const remove$1 = extensionId => {
1701
1832
 
1702
1833
  /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
1703
1834
  const invoke = (method, ...params) => {
1704
- return invoke$2(method, ...params);
1835
+ return invoke$3(method, ...params);
1705
1836
  };
1706
1837
  const invokeAndTransfer = (method, ...params) => {
1707
1838
  return invokeAndTransfer$1(method, ...params);
@@ -1728,7 +1859,7 @@ const createIsolatedExtensionHostWorker = async (extensionId, absolutePath, work
1728
1859
  return bindCommandMap(rpc, commandMap);
1729
1860
  };
1730
1861
  const createWorker = (extensionId, absolutePath, workerName, contentSecurityPolicy) => {
1731
- return createIsolatedExtensionHostWorker(extensionId, absolutePath, workerName, contentSecurityPolicy, create$6, invokeAndTransfer);
1862
+ return createIsolatedExtensionHostWorker(extensionId, absolutePath, workerName, contentSecurityPolicy, create$7, invokeAndTransfer);
1732
1863
  };
1733
1864
  const createAndStoreRpc = async (extensionId, absolutePath, workerName, contentSecurityPolicy, create) => {
1734
1865
  const rpc = await create(extensionId, absolutePath, workerName, contentSecurityPolicy);
@@ -1777,14 +1908,119 @@ const activateIsolatedExtension = async (extensionId, absolutePath, workerName,
1777
1908
  }
1778
1909
  };
1779
1910
 
1780
- const addSemicolon = directive => {
1781
- return directive.endsWith(';') ? directive : `${directive};`;
1911
+ const getOrigin = () => {
1912
+ return globalThis.location?.origin || 'http://localhost';
1782
1913
  };
1783
- const getContentSecurityPolicy = directives => {
1784
- if (!directives) {
1785
- return '';
1914
+
1915
+ /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
1916
+
1917
+ const allowedScriptSources = new Set([`'self'`, `'unsafe-eval'`]);
1918
+ const reservedDirectives = new Set(['child-src', 'connect-src', 'default-src', 'script-src', 'worker-src']);
1919
+ const parseDirective = directive => {
1920
+ if (directive.includes('\n') || directive.includes('\r')) {
1921
+ throw new Error('content security policy directives cannot contain newlines');
1786
1922
  }
1787
- return directives.map(addSemicolon).join(' ');
1923
+ return directive.replace(/;$/, '').trim().split(/\s+/);
1924
+ };
1925
+ const getWorkerUrls = absolutePath => {
1926
+ const applicationUrl = new URL(getOrigin());
1927
+ const workerUrl = new URL(absolutePath, applicationUrl);
1928
+ if (workerUrl.protocol !== 'http:' && workerUrl.protocol !== 'https:') {
1929
+ return {
1930
+ origin: applicationUrl.origin
1931
+ };
1932
+ }
1933
+ const webSocketProtocol = applicationUrl.protocol === 'https:' ? 'wss:' : 'ws:';
1934
+ return {
1935
+ assetSource: new URL('./', workerUrl).href,
1936
+ capabilitySource: `${webSocketProtocol}//${applicationUrl.host}/websocket/capability`,
1937
+ origin: applicationUrl.origin
1938
+ };
1939
+ };
1940
+ const validateExternalConnectSource = (source, applicationOrigin) => {
1941
+ if (source.includes('*') || source === `'none'`) {
1942
+ throw new Error(`invalid isolated extension connect source ${source}`);
1943
+ }
1944
+ let url;
1945
+ try {
1946
+ url = new URL(source);
1947
+ } catch {
1948
+ throw new Error(`isolated extension connect source must be an absolute URL: ${source}`);
1949
+ }
1950
+ if (!['http:', 'https:', 'ws:', 'wss:'].includes(url.protocol) || !url.hostname || url.username || url.password) {
1951
+ throw new Error(`invalid isolated extension connect source ${source}`);
1952
+ }
1953
+ const applicationUrl = new URL(applicationOrigin);
1954
+ if (url.host === applicationUrl.host) {
1955
+ throw new Error(`isolated extensions cannot allow the application origin in connect-src`);
1956
+ }
1957
+ return source;
1958
+ };
1959
+ const addScriptSources = (scriptSources, sources) => {
1960
+ for (const source of sources) {
1961
+ if (!allowedScriptSources.has(source)) {
1962
+ throw new Error(`invalid isolated extension script source ${source}`);
1963
+ }
1964
+ scriptSources.add(source);
1965
+ }
1966
+ };
1967
+ const addConnectSources = (connectSources, sources, assetSource, origin) => {
1968
+ for (const source of sources) {
1969
+ if (source === `'self'`) {
1970
+ if (assetSource) {
1971
+ connectSources.add(assetSource);
1972
+ }
1973
+ } else {
1974
+ connectSources.add(validateExternalConnectSource(source, origin));
1975
+ }
1976
+ }
1977
+ };
1978
+ const validateDefaultSources = sources => {
1979
+ if (sources.length !== 1 || sources[0] !== `'none'`) {
1980
+ throw new Error(`isolated extension default-src must be 'none'`);
1981
+ }
1982
+ };
1983
+ const applyDirective = (directive, scriptSources, connectSources, assetSource, origin) => {
1984
+ const [name, ...sources] = parseDirective(directive);
1985
+ if (!name) {
1986
+ return;
1987
+ }
1988
+ if (name === 'default-src') {
1989
+ validateDefaultSources(sources);
1990
+ return;
1991
+ }
1992
+ if (name === 'script-src') {
1993
+ addScriptSources(scriptSources, sources);
1994
+ return;
1995
+ }
1996
+ if (name === 'connect-src') {
1997
+ addConnectSources(connectSources, sources, assetSource, origin);
1998
+ return;
1999
+ }
2000
+ if (reservedDirectives.has(name)) {
2001
+ throw new Error(`isolated extensions cannot override ${name}`);
2002
+ }
2003
+ };
2004
+ const getContentSecurityPolicy = (directives, absolutePath) => {
2005
+ const {
2006
+ assetSource,
2007
+ capabilitySource,
2008
+ origin
2009
+ } = getWorkerUrls(absolutePath);
2010
+ const scriptSources = new Set([`'self'`]);
2011
+ const connectSources = new Set();
2012
+ if (capabilitySource) {
2013
+ connectSources.add(capabilitySource);
2014
+ }
2015
+ if (assetSource) {
2016
+ connectSources.add(assetSource);
2017
+ }
2018
+ const manifestDirectives = directives || [];
2019
+ for (const directive of manifestDirectives) {
2020
+ applyDirective(directive, scriptSources, connectSources, assetSource, origin);
2021
+ }
2022
+ const connectDirective = connectSources.size > 0 ? [...connectSources].join(' ') : `'none'`;
2023
+ return `default-src 'none'; script-src ${[...scriptSources].join(' ')}; worker-src 'none'; child-src 'none'; connect-src ${connectDirective};`;
1788
2024
  };
1789
2025
 
1790
2026
  const rpcs = Object.create(null);
@@ -1859,7 +2095,7 @@ const activateExtension3 = async (extension, absolutePath, activationEvent, plat
1859
2095
  throw new Error(`Extension ${extensionId} does not use the isolated extension API`);
1860
2096
  }
1861
2097
  handleRpcInfos(extension, platform);
1862
- const contentSecurityPolicy = getContentSecurityPolicy(extension.contentSecurityPolicy);
2098
+ const contentSecurityPolicy = getContentSecurityPolicy(extension.contentSecurityPolicy, absolutePath);
1863
2099
  await activateIsolatedExtension(extensionId, absolutePath, extension.workerName || '', contentSecurityPolicy, activationEvent);
1864
2100
  };
1865
2101
 
@@ -1942,7 +2178,7 @@ const getWebDisabledExtensionIds = async () => {
1942
2178
  };
1943
2179
  const getRemoteDisabledExtensionIds = async () => {
1944
2180
  try {
1945
- const uri = await invoke$2('WebView.compatSharedProcessInvoke', 'PlatformPaths.getDisabledExtensionsJsonUri');
2181
+ const uri = await invoke$3('WebView.compatSharedProcessInvoke', 'PlatformPaths.getDisabledExtensionsJsonUri');
1946
2182
  const exists$1 = await exists(uri);
1947
2183
  if (!exists$1) {
1948
2184
  return [];
@@ -1981,8 +2217,8 @@ const isHttpLocation = () => {
1981
2217
  };
1982
2218
  const getRuntimeContext = async (assetDir, platform) => {
1983
2219
  const shouldInferPlatform = isMissingPlatform(platform);
1984
- const resolvedAssetDir = isMissingAssetDir(assetDir) ? await invoke$2('Layout.getAssetDir') : assetDir;
1985
- const resolvedPlatform = shouldInferPlatform ? await invoke$2('Layout.getPlatform') : platform;
2220
+ const resolvedAssetDir = isMissingAssetDir(assetDir) ? await invoke$3('Layout.getAssetDir') : assetDir;
2221
+ const resolvedPlatform = shouldInferPlatform ? await invoke$3('Layout.getPlatform') : platform;
1986
2222
  if (shouldInferPlatform && isHttpLocation() && isStaticHttpAssetDir(resolvedAssetDir)) {
1987
2223
  return {
1988
2224
  assetDir: resolvedAssetDir,
@@ -2061,7 +2297,7 @@ const stringifyJson = data => {
2061
2297
  return JSON.stringify(data, null, 2) + '\n';
2062
2298
  };
2063
2299
  const getWorkspaceUri = async () => {
2064
- const workspacePath = await invoke$2('Workspace.getPath');
2300
+ const workspacePath = await invoke$3('Workspace.getPath');
2065
2301
  return toWorkspaceUri(workspacePath);
2066
2302
  };
2067
2303
  const getWorkspaceConfigDirUri = async () => {
@@ -2169,7 +2405,7 @@ const getAllExtensionsWithState = async (extensionsState, assetDir, platform) =>
2169
2405
  const compatibleExtensions = [...webExtensions, ...meta].filter(extension => isExtensionCompatible(extension, resolvedPlatform));
2170
2406
  return getExtensionsWithState(compatibleExtensions, extensionsState, resolvedPlatform);
2171
2407
  }
2172
- const local = await invoke$1('ExtensionManagement.getAllExtensions');
2408
+ const local = await invoke$2('ExtensionManagement.getAllExtensions');
2173
2409
  return getExtensionsWithState([...local, ...meta], extensionsState, resolvedPlatform);
2174
2410
  };
2175
2411
 
@@ -2194,7 +2430,7 @@ const getAbsolutePath$1 = (extension, assetDir, platform) => {
2194
2430
  };
2195
2431
  const notifyRunningExtensionsChanged = () => {
2196
2432
  setTimeout(() => {
2197
- void invoke$2('Layout.handleExtensionsChanged');
2433
+ void invoke$3('Layout.handleExtensionsChanged');
2198
2434
  }, 0);
2199
2435
  };
2200
2436
  const doActivateExtension = async (extension, absolutePath, event, platform) => {
@@ -2251,21 +2487,21 @@ const activateByEvent = async (event, assetDir, platform) => {
2251
2487
  const invalidateExtensionsCache = async (extensionId, disabled) => {
2252
2488
  try {
2253
2489
  if (extensionId) {
2254
- await invoke$2('ExtensionManagement.handleExtensionsCacheInvalidated', extensionId, disabled);
2490
+ await invoke$3('ExtensionManagement.handleExtensionsCacheInvalidated', extensionId, disabled);
2255
2491
  return;
2256
2492
  }
2257
- await invoke$2('ExtensionManagement.handleExtensionsCacheInvalidated');
2493
+ await invoke$3('ExtensionManagement.handleExtensionsCacheInvalidated');
2258
2494
  } catch {
2259
2495
  // Older renderer workers do not expose the cache invalidation notification.
2260
2496
  }
2261
2497
  };
2262
2498
 
2263
2499
  const handleChange = async _id => {
2264
- const statusBarVisible = await invoke$2('Layout.getStatusBarVisible');
2500
+ const statusBarVisible = await invoke$3('Layout.getStatusBarVisible');
2265
2501
  if (!statusBarVisible) {
2266
2502
  return;
2267
2503
  }
2268
- await invoke$2('StatusBar.handleItemsChanged');
2504
+ await invoke$3('StatusBar.handleItemsChanged');
2269
2505
  };
2270
2506
 
2271
2507
  const hasStatusBarItems = extension => {
@@ -2405,7 +2641,7 @@ const disableExtension2$1 = async (id, platform) => {
2405
2641
  };
2406
2642
  await setJson(disabledExtensionsCacheKey, newData);
2407
2643
  } else {
2408
- await invoke$1('ExtensionManagement.disable', id);
2644
+ await invoke$2('ExtensionManagement.disable', id);
2409
2645
  }
2410
2646
  };
2411
2647
  const enableExtension2$1 = async (id, platform) => {
@@ -2458,7 +2694,7 @@ const enableExtension2 = async (id, platform) => {
2458
2694
  string(id);
2459
2695
  number(platform);
2460
2696
  if (platform === Remote || platform === Electron) {
2461
- const disabledExtensionsJsonPath = await invoke$2('WebView.compatSharedProcessInvoke', 'PlatformPaths.getDisabledExtensionsJsonUri');
2697
+ const disabledExtensionsJsonPath = await invoke$3('WebView.compatSharedProcessInvoke', 'PlatformPaths.getDisabledExtensionsJsonUri');
2462
2698
  const exists$1 = await exists(disabledExtensionsJsonPath);
2463
2699
  if (!exists$1) {
2464
2700
  return undefined;
@@ -2514,7 +2750,7 @@ const getRpcForCommand = async (extensionsState, id, platform) => {
2514
2750
  return get$3(extensionId);
2515
2751
  };
2516
2752
  const executeRendererCommand = (id, args) => {
2517
- return invoke$2(id, ...args);
2753
+ return invoke$3(id, ...args);
2518
2754
  };
2519
2755
  const executeCommand = async (extensionsState, id, ...args) => {
2520
2756
  const {
@@ -2546,7 +2782,7 @@ const executeExtensionCommand = async (extensionsState, id, ...args) => {
2546
2782
 
2547
2783
  const getLanguageServerRootUri = async () => {
2548
2784
  try {
2549
- const workspacePath = await invoke$2('Workspace.getPath');
2785
+ const workspacePath = await invoke$3('Workspace.getPath');
2550
2786
  return typeof workspacePath === 'string' && workspacePath ? workspacePath : undefined;
2551
2787
  } catch {
2552
2788
  return undefined;
@@ -2622,7 +2858,7 @@ const executeLanguageServerCompletion = async (rpc, extension, textDocument, off
2622
2858
  let result;
2623
2859
  try {
2624
2860
  const rootUri = await getLanguageServerRootUri();
2625
- result = await invoke$1('LanguageServer.complete', {
2861
+ result = await invoke$2('LanguageServer.complete', {
2626
2862
  argv: languageServer.argv,
2627
2863
  id: languageServer.id,
2628
2864
  offset,
@@ -2640,10 +2876,6 @@ const executeLanguageServerCompletion = async (rpc, extension, textDocument, off
2640
2876
  return result.map(sanitizeCompletionItem).filter(item => item !== undefined);
2641
2877
  };
2642
2878
 
2643
- const getOrigin = () => {
2644
- return globalThis.location?.origin || 'http://localhost';
2645
- };
2646
-
2647
2879
  const getExtensionId$1 = extension => {
2648
2880
  return extension.id || interExtensionId(extension.uri || extension.path || '');
2649
2881
  };
@@ -2658,7 +2890,7 @@ const getRpc$1 = async (extension, assetDir, platform) => {
2658
2890
  }
2659
2891
  handleRpcInfos(extension, platform);
2660
2892
  const absolutePath = getAbsolutePath(extension, assetDir, platform);
2661
- const contentSecurityPolicy = getContentSecurityPolicy(extension.contentSecurityPolicy);
2893
+ const contentSecurityPolicy = getContentSecurityPolicy(extension.contentSecurityPolicy, absolutePath);
2662
2894
  return getOrCreateIsolatedExtensionHostWorker(extensionId, absolutePath, extension.workerName || '', contentSecurityPolicy);
2663
2895
  };
2664
2896
 
@@ -2736,7 +2968,7 @@ const executeLanguageServerDiagnostic = async (rpc, extension, textDocument) =>
2736
2968
  return [];
2737
2969
  }
2738
2970
  const rootUri = await getLanguageServerRootUri();
2739
- const result = await invoke$1('LanguageServer.diagnostic', {
2971
+ const result = await invoke$2('LanguageServer.diagnostic', {
2740
2972
  argv: languageServer.argv,
2741
2973
  id: languageServer.id,
2742
2974
  ...(rootUri && {
@@ -3022,6 +3254,16 @@ const executeSourceControlProvider = async (extensionsState, providerId, methodN
3022
3254
  result
3023
3255
  };
3024
3256
  };
3257
+ const executeRequiredSourceControlProvider = async (extensionsState, providerId, methodName, ...args) => {
3258
+ const {
3259
+ found,
3260
+ result
3261
+ } = await executeSourceControlProvider(extensionsState, providerId, methodName, ...args);
3262
+ if (!found) {
3263
+ throw new Error('No source control provider found');
3264
+ }
3265
+ return result;
3266
+ };
3025
3267
 
3026
3268
  const readFile = uri => {
3027
3269
  return readFile$1(uri);
@@ -3263,10 +3505,10 @@ const getViewActionsDom = async (viewId, uid, assetDir, platform) => {
3263
3505
  }
3264
3506
  };
3265
3507
  const requestViewRerender = async uid => {
3266
- await invoke$2('Viewlet.executeViewletCommand', uid, 'rerender');
3508
+ await invoke$3('Viewlet.executeViewletCommand', uid, 'rerender');
3267
3509
  };
3268
3510
  const showViewContextMenu = async (uid, viewId, menuId, x, y) => {
3269
- await invoke$2('ExtensionManagement.showViewContextMenu', uid, viewId, menuId, x, y);
3511
+ await invoke$3('ExtensionManagement.showViewContextMenu', uid, viewId, menuId, x, y);
3270
3512
  };
3271
3513
  const renderViewInstance = async (viewId, uid, assetDir, platform) => {
3272
3514
  const instance = get$1(uid);
@@ -3293,7 +3535,7 @@ const saveViewInstanceState = async (viewId, uid, assetDir, platform) => {
3293
3535
  };
3294
3536
 
3295
3537
  const getAccessToken = (options = {}) => {
3296
- return invoke$5('Auth.getAccessToken', options);
3538
+ return invoke$6('Auth.getAccessToken', options);
3297
3539
  };
3298
3540
 
3299
3541
  const transparent = (color, factor) => {
@@ -3430,7 +3672,7 @@ const getColorThemeCssCached = async (colorThemeId, platform, getData) => {
3430
3672
  };
3431
3673
 
3432
3674
  const readJson = url => {
3433
- return invoke$2('FileSystem.readJson', url);
3675
+ return invoke$3('FileSystem.readJson', url);
3434
3676
  };
3435
3677
 
3436
3678
  const join = (pathSeparator, ...parts) => {
@@ -3599,7 +3841,7 @@ const createWebViewIpc = async webView => {
3599
3841
  port1,
3600
3842
  port2
3601
3843
  } = getPortTuple();
3602
- const rpcPromise = create$2({
3844
+ const rpcPromise = create$3({
3603
3845
  commandMap: {},
3604
3846
  isMessagePortOpen: false,
3605
3847
  messagePort: port2
@@ -3880,7 +4122,7 @@ const handleFileChanges = async (changes = {}) => {
3880
4122
  };
3881
4123
 
3882
4124
  const handleMessagePort = async (port, rpcId) => {
3883
- await create$7({
4125
+ await create$8({
3884
4126
  commandMap: commandMapRef,
3885
4127
  messagePort: port
3886
4128
  });
@@ -3888,44 +4130,69 @@ const handleMessagePort = async (port, rpcId) => {
3888
4130
 
3889
4131
  const prefix = '[Extension] Uncaught Error: ';
3890
4132
  const handleUncaughtExtensionError = async error => {
3891
- const prettyError = await invoke$4('Errors.prepare', error);
3892
- await invoke$4('Errors.print', prettyError, prefix);
4133
+ const prettyError = await invoke$5('Errors.prepare', error);
4134
+ await invoke$5('Errors.print', prettyError, prefix);
3893
4135
  };
3894
4136
 
3895
4137
  const handleViewContextChange = async (uid, viewId, context) => {
3896
- await invoke$2('ExtensionManagement.handleViewContextChange', uid, viewId, context);
4138
+ await invoke$3('ExtensionManagement.handleViewContextChange', uid, viewId, context);
3897
4139
  };
3898
4140
 
3899
- const getRpcRemote = async () => {
3900
- const rpc = await create$3({
4141
+ const defaultDependencies = {
4142
+ createLegacyWebSocketRpc: create$4,
4143
+ createTransferMessagePortRpc: create$7,
4144
+ createWebSocket(url, protocols) {
4145
+ return new WebSocket(url, [...protocols]);
4146
+ },
4147
+ createWebSocketRpc: create$5,
4148
+ invokeRenderer: invoke$3,
4149
+ sendMessagePortToSharedProcess: sendMessagePortToSharedProcess,
4150
+ setSharedProcess: set$5
4151
+ };
4152
+ const getRpcRemote = async dependencies => {
4153
+ try {
4154
+ const {
4155
+ protocols,
4156
+ url
4157
+ } = await dependencies.invokeRenderer('WebSocketCapability.create', 'shared-process');
4158
+ const webSocket = dependencies.createWebSocket(url, protocols);
4159
+ return dependencies.createWebSocketRpc({
4160
+ commandMap: commandMapRef,
4161
+ webSocket
4162
+ });
4163
+ } catch (error) {
4164
+ if (!(error instanceof Error && (error.message.includes('WebSocketCapability.create') || error.message.includes('module WebSocketCapability not found')) && /command not found|not found/i.test(error.message))) {
4165
+ throw error;
4166
+ }
4167
+ }
4168
+ return dependencies.createLegacyWebSocketRpc({
3901
4169
  commandMap: commandMapRef,
3902
4170
  type: 'shared-process'
3903
4171
  });
3904
- return rpc;
3905
4172
  };
3906
- const getRpcElectron = async () => {
3907
- const rpc = create$6({
4173
+ const getRpcElectron = async dependencies => {
4174
+ const rpc = dependencies.createTransferMessagePortRpc({
3908
4175
  commandMap: commandMapRef,
3909
4176
  async send(port) {
3910
- await sendMessagePortToSharedProcess(port);
4177
+ await dependencies.sendMessagePortToSharedProcess(port);
3911
4178
  }
3912
4179
  });
3913
4180
  return rpc;
3914
4181
  };
3915
- const getRpc = async platform => {
4182
+ const getRpc = async (platform, dependencies) => {
3916
4183
  // TODO create connection to shared process
3917
4184
  if (platform === Remote) {
3918
- return getRpcRemote();
4185
+ return getRpcRemote(dependencies);
3919
4186
  }
3920
4187
  if (platform === Electron) {
3921
- return getRpcElectron();
4188
+ return getRpcElectron(dependencies);
3922
4189
  }
3923
4190
  return undefined;
3924
4191
  };
3925
- const initializeSharedProcess = async platform => {
3926
- const rpc = await getRpc(platform);
4192
+ const initializeSharedProcess = async (platform, dependencies = defaultDependencies) => {
4193
+ const rpc = await getRpc(platform, dependencies);
3927
4194
  if (rpc) {
3928
- set$5(rpc);
4195
+ dependencies.setSharedProcess(rpc);
3929
4196
  }
3930
4197
  };
3931
4198
 
@@ -3996,10 +4263,10 @@ const getLanguages = async (platform, assetDir) => {
3996
4263
  };
3997
4264
 
3998
4265
  const getPreference = async key => {
3999
- return invoke$2('Preferences.get', key);
4266
+ return invoke$3('Preferences.get', key);
4000
4267
  };
4001
4268
  const setPreference = async (key, value) => {
4002
- await invoke$2('Preferences.update', {
4269
+ await invoke$3('Preferences.update', {
4003
4270
  [key]: value
4004
4271
  });
4005
4272
  };
@@ -4013,7 +4280,7 @@ const sendMessagePortToFileSystemWorker = async port => {
4013
4280
  };
4014
4281
 
4015
4282
  const showQuickPick = async options => {
4016
- return invoke$2('ExtensionHostQuickPick.showQuickPick', options);
4283
+ return invoke$3('ExtensionHostQuickPick.showQuickPick', options);
4017
4284
  };
4018
4285
 
4019
4286
  const uninstallExtension = async () => {
@@ -4028,9 +4295,27 @@ const wrapCommand = command => {
4028
4295
  return command(get$5(), ...args);
4029
4296
  };
4030
4297
  };
4298
+ const wrapSourceControlProviderCommand = methodName => {
4299
+ return wrapCommand((extensionsState, providerId, ...args) => {
4300
+ return executeRequiredSourceControlProvider(extensionsState, providerId, methodName, ...args);
4301
+ });
4302
+ };
4031
4303
  const commandMap = {
4032
4304
  'ExtensionApi.readFile': readFile,
4305
+ 'ExtensionHost.sourceControlGetChangedFiles': wrapSourceControlProviderCommand('executeSourceControlGetChangedFiles'),
4033
4306
  'ExtensionHostQuickPick.showQuickPick': showQuickPick,
4307
+ 'ExtensionHostSourceControl.acceptInput': wrapSourceControlProviderCommand('executeSourceControlAcceptInput'),
4308
+ 'ExtensionHostSourceControl.add': wrapSourceControlProviderCommand('executeSourceControlAdd'),
4309
+ 'ExtensionHostSourceControl.discard': wrapSourceControlProviderCommand('executeSourceControlDiscard'),
4310
+ 'ExtensionHostSourceControl.generateCommitMessage': wrapSourceControlProviderCommand('executeSourceControlGenerateCommitMessage'),
4311
+ 'ExtensionHostSourceControl.getBadgeCount': wrapSourceControlProviderCommand('executeSourceControlGetBadgeCount'),
4312
+ 'ExtensionHostSourceControl.getChangedFiles': wrapSourceControlProviderCommand('executeSourceControlGetChangedFiles'),
4313
+ 'ExtensionHostSourceControl.getEnabledProviderIds': wrapCommand(getEnabledSourceControlProviderIds),
4314
+ 'ExtensionHostSourceControl.getFeatures': wrapSourceControlProviderCommand('executeSourceControlGetFeatures'),
4315
+ 'ExtensionHostSourceControl.getFileBefore': wrapSourceControlProviderCommand('executeSourceControlGetFileBefore'),
4316
+ 'ExtensionHostSourceControl.getFileDecorations': wrapSourceControlProviderCommand('executeSourceControlGetFileDecorations'),
4317
+ 'ExtensionHostSourceControl.getGroups': wrapSourceControlProviderCommand('executeSourceControlGetGroups'),
4318
+ 'ExtensionHostSourceControl.getIconDefinitions': async () => [],
4034
4319
  'Extensions.activateByEvent': activateByEvent,
4035
4320
  'Extensions.addExtension': addExtension,
4036
4321
  'Extensions.addWebExtension': addWebExtension,
@@ -4105,7 +4390,7 @@ const commandMap = {
4105
4390
  };
4106
4391
 
4107
4392
  const initializeAuthWorker = async () => {
4108
- const rpc = await create$5({
4393
+ const rpc = await create$6({
4109
4394
  commandMap: commandMapRef,
4110
4395
  async send(port) {
4111
4396
  await sendMessagePortToAuthWorker(port, 0);
@@ -4115,7 +4400,7 @@ const initializeAuthWorker = async () => {
4115
4400
  };
4116
4401
 
4117
4402
  const initializeErrorWorker = async () => {
4118
- const rpc = await create$5({
4403
+ const rpc = await create$6({
4119
4404
  commandMap: commandMapRef,
4120
4405
  async send(port) {
4121
4406
  await sendMessagePortToErrorWorker(port, 0);
@@ -4125,7 +4410,7 @@ const initializeErrorWorker = async () => {
4125
4410
  };
4126
4411
 
4127
4412
  const initializeFileSystemWorker = async () => {
4128
- const rpc = await create$5({
4413
+ const rpc = await create$6({
4129
4414
  commandMap: commandMapRef,
4130
4415
  async send(port) {
4131
4416
  await sendMessagePortToFileSystemWorker$1(port, 0);
@@ -4135,7 +4420,7 @@ const initializeFileSystemWorker = async () => {
4135
4420
  };
4136
4421
 
4137
4422
  const initializeIframeWorker = async () => {
4138
- const rpc = await create$5({
4423
+ const rpc = await create$6({
4139
4424
  commandMap: {},
4140
4425
  async send(port) {
4141
4426
  await sendMessagePortToIconThemeWorker(port, 0);
@@ -4145,7 +4430,7 @@ const initializeIframeWorker = async () => {
4145
4430
  };
4146
4431
 
4147
4432
  const initializeRendererWorker = async () => {
4148
- const rpc = await create$1({
4433
+ const rpc = await create$2({
4149
4434
  commandMap: commandMap
4150
4435
  });
4151
4436
  set$6(rpc);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"