@lvce-editor/extension-management-worker 1.13.0 → 1.15.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.
@@ -948,10 +948,10 @@ const send = (transport, method, ...params) => {
948
948
  const message = create$4$1(method, params);
949
949
  transport.send(message);
950
950
  };
951
- const invoke$4 = (ipc, method, ...params) => {
951
+ const invoke$5 = (ipc, method, ...params) => {
952
952
  return invokeHelper(ipc, method, params, false);
953
953
  };
954
- const invokeAndTransfer$1 = (ipc, method, ...params) => {
954
+ const invokeAndTransfer$2 = (ipc, method, ...params) => {
955
955
  return invokeHelper(ipc, method, params, true);
956
956
  };
957
957
 
@@ -987,10 +987,10 @@ const createRpc = ipc => {
987
987
  send(ipc, method, ...params);
988
988
  },
989
989
  invoke(method, ...params) {
990
- return invoke$4(ipc, method, ...params);
990
+ return invoke$5(ipc, method, ...params);
991
991
  },
992
992
  invokeAndTransfer(method, ...params) {
993
- return invokeAndTransfer$1(ipc, method, ...params);
993
+ return invokeAndTransfer$2(ipc, method, ...params);
994
994
  },
995
995
  async dispose() {
996
996
  await ipc?.dispose();
@@ -1028,6 +1028,26 @@ const listen$1 = async (module, options) => {
1028
1028
  const ipc = module.wrap(rawIpc);
1029
1029
  return ipc;
1030
1030
  };
1031
+ const create$e = async ({
1032
+ commandMap,
1033
+ messagePort,
1034
+ isMessagePortOpen
1035
+ }) => {
1036
+ // TODO create a commandMap per rpc instance
1037
+ register(commandMap);
1038
+ const rawIpc = await IpcParentWithMessagePort$1.create({
1039
+ messagePort,
1040
+ isMessagePortOpen
1041
+ });
1042
+ const ipc = IpcParentWithMessagePort$1.wrap(rawIpc);
1043
+ handleIpc(ipc);
1044
+ const rpc = createRpc(ipc);
1045
+ return rpc;
1046
+ };
1047
+ const MessagePortRpcParent = {
1048
+ __proto__: null,
1049
+ create: create$e
1050
+ };
1031
1051
  const create$5 = async ({
1032
1052
  commandMap,
1033
1053
  messagePort
@@ -1171,47 +1191,47 @@ const create$1 = rpcId => {
1171
1191
  };
1172
1192
 
1173
1193
  const {
1174
- invoke: invoke$3,
1194
+ invoke: invoke$4,
1175
1195
  set: set$6
1176
1196
  } = create$1(ExtensionHostWorker);
1177
1197
 
1178
1198
  const {
1179
- invoke: invoke$2,
1199
+ invoke: invoke$3,
1180
1200
  set: set$5
1181
1201
  } = create$1(FileSystemWorker);
1182
1202
  const readFile = async uri => {
1183
- return invoke$2('FileSystem.readFile', uri);
1203
+ return invoke$3('FileSystem.readFile', uri);
1184
1204
  };
1185
1205
  const writeFile = async (uri, content) => {
1186
- return invoke$2('FileSystem.writeFile', uri, content);
1206
+ return invoke$3('FileSystem.writeFile', uri, content);
1187
1207
  };
1188
1208
  const exists = async uri => {
1189
1209
  // @ts-ignore
1190
- return invoke$2('FileSystem.exists', uri);
1210
+ return invoke$3('FileSystem.exists', uri);
1191
1211
  };
1192
1212
 
1193
1213
  const {
1194
- invoke: invoke$1,
1195
- invokeAndTransfer,
1214
+ invoke: invoke$2,
1215
+ invokeAndTransfer: invokeAndTransfer$1,
1196
1216
  set: set$4
1197
1217
  } = create$1(RendererWorker);
1198
1218
  const sendMessagePortToFileSystemWorker = async (port, rpcId) => {
1199
1219
  const command = 'FileSystem.handleMessagePort';
1200
1220
  // @ts-ignore
1201
- await invokeAndTransfer('SendMessagePortToExtensionHostWorker.sendMessagePortToFileSystemWorker', port, command, rpcId);
1221
+ await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToFileSystemWorker', port, command, rpcId);
1202
1222
  };
1203
1223
  const sendMessagePortToExtensionHostWorker = async (port, rpcId = 0) => {
1204
1224
  const command = 'HandleMessagePort.handleMessagePort2';
1205
- await invokeAndTransfer('SendMessagePortToExtensionHostWorker.sendMessagePortToExtensionHostWorker', port, command, rpcId);
1225
+ await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToExtensionHostWorker', port, command, rpcId);
1206
1226
  };
1207
1227
  const sendMessagePortToSharedProcess = async port => {
1208
1228
  const command = 'HandleElectronMessagePort.handleElectronMessagePort';
1209
1229
  // @ts-ignore
1210
- await invokeAndTransfer('SendMessagePortToExtensionHostWorker.sendMessagePortToSharedProcess', port, command, 0);
1230
+ await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToSharedProcess', port, command, 0);
1211
1231
  };
1212
1232
 
1213
1233
  const {
1214
- invoke,
1234
+ invoke: invoke$1,
1215
1235
  set: set$3
1216
1236
  } = create$1(SharedProcess);
1217
1237
 
@@ -1317,7 +1337,7 @@ const rejectAfterTimeout = async (timeout, token) => {
1317
1337
  throw new Error(`Activation timeout of ${timeout}ms exceeded`);
1318
1338
  };
1319
1339
  const activate = async (extensionId, extension) => {
1320
- await invoke$3('ExtensionHost.activateExtension3', extensionId, extension);
1340
+ await invoke$4('ExtensionHost.activateExtension3', extensionId, extension);
1321
1341
  };
1322
1342
  const activateExtension2 = async (extensionId, extension, absolutePath) => {
1323
1343
  string(extensionId);
@@ -1412,7 +1432,7 @@ const importExtension = async (extensionId, absolutePath, activationEvent) => {
1412
1432
  status: Importing
1413
1433
  });
1414
1434
  try {
1415
- await invoke$3('ExtensionHost.importExtension2', extensionId, absolutePath);
1435
+ await invoke$4('ExtensionHost.importExtension2', extensionId, absolutePath);
1416
1436
  const endTime = performance.now();
1417
1437
  const time = endTime - startTime;
1418
1438
  update$1(extensionId, {
@@ -1494,8 +1514,66 @@ const addWebExtension = async path => {
1494
1514
  return manifest;
1495
1515
  };
1496
1516
 
1517
+ const ModuleWorkerAndWorkaroundForChromeDevtoolsBug = 6;
1518
+
1519
+ /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
1520
+ const invoke = (method, ...params) => {
1521
+ return invoke$2(method, ...params);
1522
+ };
1523
+ const invokeAndTransfer = (method, ...params) => {
1524
+ return invokeAndTransfer$1(method, ...params);
1525
+ };
1526
+
1527
+ const createWebViewWorkerRpc2 = async (rpcInfo, port) => {
1528
+ // TODO this function is called from the iframe worker to create a direct
1529
+ // connection between a webview/iframe and it's webworker. For this to work
1530
+ // the iframe worker creates a messagechannel and sends one messageport to the webview
1531
+ // and the other messageport to the webworker. This enables direct communication via
1532
+ // the two message ports
1533
+
1534
+ // TODO have a way so that the worker already includes the webview api and the extension
1535
+ // host subworker doesn't need to import the other file
1536
+ await invokeAndTransfer('IpcParent.create', {
1537
+ method: ModuleWorkerAndWorkaroundForChromeDevtoolsBug,
1538
+ name: rpcInfo.name,
1539
+ port,
1540
+ raw: true,
1541
+ url: rpcInfo.url
1542
+ });
1543
+ };
1544
+
1545
+ const getExtensionHostSubWorkerUrl = () => {
1546
+ return new URL('../../../../extension-host-sub-worker/src/extensionHostSubWorkerMain.js', import.meta.url).toString();
1547
+ };
1548
+ const extensionHostSubWorkerUrl = getExtensionHostSubWorkerUrl();
1549
+
1550
+ // TODO
1551
+
1552
+ /**
1553
+ * @deprecated use createWebViewWorkerRpc2 which passes the worker url as a parameter
1554
+ */
1555
+ const createWebViewWorkerRpc = async (rpcInfo, port) => {
1556
+ object(rpcInfo);
1557
+ object(port);
1558
+ // TODO this function is called from the iframe worker to create a direct
1559
+ // connection between a webview/iframe and it's webworker. For this to work
1560
+ // the iframe worker creates a messagechannel and sends one messageport to the webview
1561
+ // and the other messageport to the webworker. This enables direct communication via
1562
+ // the two message ports
1563
+
1564
+ // TODO have a way so that the worker already includes the webview api and the extension
1565
+ // host subworker doesn't need to import the other file
1566
+ await invokeAndTransfer$1('IpcParent.create', {
1567
+ method: ModuleWorkerAndWorkaroundForChromeDevtoolsBug,
1568
+ name: rpcInfo.name,
1569
+ port,
1570
+ raw: true,
1571
+ url: extensionHostSubWorkerUrl
1572
+ });
1573
+ };
1574
+
1497
1575
  const invalidateExtensionsCache = async () => {
1498
- await invoke$1('ExtensionManagement.invalidateExtensionsCache');
1576
+ await invoke$2('ExtensionManagement.invalidateExtensionsCache');
1499
1577
  };
1500
1578
 
1501
1579
  let state = {
@@ -1526,7 +1604,7 @@ const disableExtension = async (id, isTest) => {
1526
1604
  };
1527
1605
  set$1(newState);
1528
1606
  } else {
1529
- await invoke('ExtensionManagement.disable', id);
1607
+ await invoke$1('ExtensionManagement.disable', id);
1530
1608
  }
1531
1609
  await invalidateExtensionsCache();
1532
1610
  return undefined;
@@ -1541,7 +1619,7 @@ const enableExtension = async (id, isTest) => {
1541
1619
  platform
1542
1620
  } = oldState;
1543
1621
  if (platform === Remote || platform === Electron) {
1544
- const disabledExtensionsJsonPath = await invoke$1('PlatformPaths.getBuiltinExtensionsJsonPath');
1622
+ const disabledExtensionsJsonPath = await invoke$2('PlatformPaths.getBuiltinExtensionsJsonPath');
1545
1623
  const exists$1 = await exists(disabledExtensionsJsonPath);
1546
1624
  if (!exists$1) {
1547
1625
  return undefined;
@@ -1707,7 +1785,7 @@ const getColorThemeCssCached = async (colorThemeId, platform, getData) => {
1707
1785
  };
1708
1786
 
1709
1787
  const readJson = url => {
1710
- return invoke$1('FileSystem.readJson', url);
1788
+ return invoke$2('FileSystem.readJson', url);
1711
1789
  };
1712
1790
 
1713
1791
  const join = (pathSeparator, ...parts) => {
@@ -1735,7 +1813,7 @@ const getAllExtensions = async () => {
1735
1813
  if (state.platform === Web) {
1736
1814
  return [];
1737
1815
  }
1738
- return invoke('ExtensionManagement.getAllExtensions');
1816
+ return invoke$1('ExtensionManagement.getAllExtensions');
1739
1817
  };
1740
1818
 
1741
1819
  const getColorThemeJson$2 = async colorThemeId => {
@@ -1808,6 +1886,62 @@ const getExtension = async id => {
1808
1886
  return undefined;
1809
1887
  };
1810
1888
 
1889
+ const getPortTuple = () => {
1890
+ const {
1891
+ port1,
1892
+ port2
1893
+ } = new MessageChannel();
1894
+ return {
1895
+ port1,
1896
+ port2
1897
+ };
1898
+ };
1899
+
1900
+ const createWebViewIpc = async webView => {
1901
+ const {
1902
+ origin,
1903
+ uid
1904
+ } = webView;
1905
+ const {
1906
+ port1,
1907
+ port2
1908
+ } = getPortTuple();
1909
+ const rpcPromise = MessagePortRpcParent.create({
1910
+ commandMap: {},
1911
+ isMessagePortOpen: false,
1912
+ messagePort: port2
1913
+ });
1914
+ const portType = 'test';
1915
+ await invokeAndTransfer('WebView.setPort', uid, port1, origin, portType);
1916
+ // TODO maybe don't send a message port only to get object url?
1917
+ // TODO dispose rpc to avoid memory leak
1918
+ const rpc = await rpcPromise;
1919
+ return rpc;
1920
+ };
1921
+
1922
+ const webViews = Object.create(null);
1923
+ const getWebView = id => {
1924
+ return webViews[id];
1925
+ };
1926
+
1927
+ // TODO if webViewId is provided,
1928
+ // 1. read file as blob
1929
+ // 2. send blob to webview
1930
+ // 3. create objecturl in webview
1931
+ // 4. send back objecturl to extension host worker
1932
+ // 5. provide objectUrl to extension
1933
+
1934
+ const getRemoteUrlForWebView = async (uri, options = {}) => {
1935
+ // TODO webviews should be stored in iframe worker
1936
+ const webView = getWebView(options.webViewId);
1937
+ if (!webView) {
1938
+ throw new Error(`webview ${options.webViewId} not found`);
1939
+ }
1940
+ const [rpc, blob] = await Promise.all([createWebViewIpc(webView), invoke('FileSystem.getBlob', uri)]);
1941
+ const objectUrl = await rpc.invoke('createObjectUrl', blob);
1942
+ return objectUrl;
1943
+ };
1944
+
1811
1945
  const getRpcInfo = rpcId => {
1812
1946
  const info = get$2(rpcId);
1813
1947
  if (!info) {
@@ -1957,6 +2091,8 @@ const commandMap = {
1957
2091
  'Extensions.activate2': activateExtension2,
1958
2092
  'Extensions.activate3': activateExtension3,
1959
2093
  'Extensions.addWebExtension': addWebExtension,
2094
+ 'Extensions.createWebViewWorkerRpc': createWebViewWorkerRpc,
2095
+ 'Extensions.createWebViewWorkerRpc2': createWebViewWorkerRpc2,
1960
2096
  'Extensions.disable': disableExtension,
1961
2097
  'Extensions.enable': enableExtension,
1962
2098
  'Extensions.getAllExtensions': getAllExtensions,
@@ -1966,6 +2102,7 @@ const commandMap = {
1966
2102
  'Extensions.getColorThemeNames': getColorThemeNames,
1967
2103
  'Extensions.getExtension': getExtension,
1968
2104
  'Extensions.getLanguages': getLanguages,
2105
+ 'Extensions.getRemoteUrlForWebView': getRemoteUrlForWebView,
1969
2106
  'Extensions.getRpcInfo': getRpcInfo,
1970
2107
  'Extensions.getRuntimeStatus': getRuntimeStatus,
1971
2108
  'Extensions.handleMessagePort': handleMessagePort,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "1.13.0",
3
+ "version": "1.15.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"