@lvce-editor/extension-management-worker 4.48.0 → 4.50.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.
@@ -64,7 +64,7 @@ const Object$1 = 1;
64
64
  const Number = 2;
65
65
  const Array$1 = 3;
66
66
  const String$1 = 4;
67
- const Boolean$1 = 5;
67
+ const Boolean = 5;
68
68
  const Function = 6;
69
69
  const Null = 7;
70
70
  const Unknown = 8;
@@ -85,7 +85,7 @@ const getType = value => {
85
85
  }
86
86
  return Object$1;
87
87
  case 'boolean':
88
- return Boolean$1;
88
+ return Boolean;
89
89
  default:
90
90
  return Unknown;
91
91
  }
@@ -546,7 +546,7 @@ const waitForWebSocketToBeOpen = webSocket => {
546
546
  open: Open
547
547
  });
548
548
  };
549
- const create$d = async ({
549
+ const create$c = 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$d,
586
+ create: create$c,
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$c = (message, result) => {
866
+ const create$b = (message, result) => {
867
867
  return {
868
868
  id: message.id,
869
869
  jsonrpc: Two$1,
@@ -872,7 +872,7 @@ const create$c = (message, result) => {
872
872
  };
873
873
  const getSuccessResponse = (message, result) => {
874
874
  const resultProperty = result ?? null;
875
- return create$c(message, resultProperty);
875
+ return create$b(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$b = (method, params) => {
969
+ const create$a = (method, params) => {
970
970
  return {
971
971
  jsonrpc: Two,
972
972
  method,
@@ -974,7 +974,7 @@ const create$b = (method, params) => {
974
974
  };
975
975
  };
976
976
 
977
- const create$a = (id, method, params) => {
977
+ const create$9 = (id, method, params) => {
978
978
  const message = {
979
979
  id,
980
980
  jsonrpc: Two,
@@ -985,12 +985,12 @@ const create$a = (id, method, params) => {
985
985
  };
986
986
 
987
987
  let id = 0;
988
- const create$9 = () => {
988
+ const create$8 = () => {
989
989
  return ++id;
990
990
  };
991
991
 
992
992
  const registerPromise = map => {
993
- const id = create$9();
993
+ const id = create$8();
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$a(id, method, params);
1010
+ const message = create$9(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$b(method, params);
1046
+ const message = create$a(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$8 = async ({
1086
+ const create$7 = async ({
1087
1087
  commandMap,
1088
1088
  isMessagePortOpen = true,
1089
1089
  messagePort
@@ -1101,7 +1101,7 @@ const create$8 = async ({
1101
1101
  return rpc;
1102
1102
  };
1103
1103
 
1104
- const create$7 = async ({
1104
+ const create$6 = async ({
1105
1105
  commandMap,
1106
1106
  isMessagePortOpen,
1107
1107
  send
@@ -1111,7 +1111,7 @@ const create$7 = async ({
1111
1111
  port2
1112
1112
  } = new MessageChannel();
1113
1113
  await send(port1);
1114
- return create$8({
1114
+ return create$7({
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$6 = async ({
1149
+ const create$5 = async ({
1150
1150
  commandMap,
1151
1151
  isMessagePortOpen,
1152
1152
  send
1153
1153
  }) => {
1154
1154
  return createSharedLazyRpc(() => {
1155
- return create$7({
1155
+ return create$6({
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$5 = async ({
1183
+ const create$4 = 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$5({
1215
+ const rpc = await create$4({
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$4 = async ({
1228
+ const create$3 = async ({
1229
1229
  commandMap,
1230
1230
  onClose,
1231
1231
  type
@@ -1254,7 +1254,7 @@ const create$4 = async ({
1254
1254
  return connection.rpc;
1255
1255
  };
1256
1256
 
1257
- const create$3 = async ({
1257
+ const create$2 = async ({
1258
1258
  commandMap,
1259
1259
  isMessagePortOpen,
1260
1260
  messagePort
@@ -1271,7 +1271,7 @@ const create$3 = async ({
1271
1271
  return rpc;
1272
1272
  };
1273
1273
 
1274
- const create$2 = async ({
1274
+ const create$1 = async ({
1275
1275
  commandMap
1276
1276
  }) => {
1277
1277
  // TODO create a commandMap per rpc instance
@@ -1303,7 +1303,7 @@ const createMockRpc = ({
1303
1303
  };
1304
1304
 
1305
1305
  const rpcs$2 = Object.create(null);
1306
- const set$b = (id, rpc) => {
1306
+ const set$a = (id, rpc) => {
1307
1307
  rpcs$2[id] = rpc;
1308
1308
  };
1309
1309
  const get$6 = id => {
@@ -1314,7 +1314,7 @@ const remove$2 = id => {
1314
1314
  };
1315
1315
 
1316
1316
  /* eslint-disable @typescript-eslint/explicit-function-return-type */
1317
- const create$1 = rpcId => {
1317
+ const create = rpcId => {
1318
1318
  return {
1319
1319
  async dispose() {
1320
1320
  const rpc = get$6(rpcId);
@@ -1336,7 +1336,7 @@ const create$1 = rpcId => {
1336
1336
  const mockRpc = createMockRpc({
1337
1337
  commandMap
1338
1338
  });
1339
- set$b(rpcId, mockRpc);
1339
+ set$a(rpcId, mockRpc);
1340
1340
  // @ts-ignore
1341
1341
  mockRpc[Symbol.dispose] = () => {
1342
1342
  remove$2(rpcId);
@@ -1345,15 +1345,15 @@ const create$1 = rpcId => {
1345
1345
  return mockRpc;
1346
1346
  },
1347
1347
  set(rpc) {
1348
- set$b(rpcId, rpc);
1348
+ set$a(rpcId, rpc);
1349
1349
  }
1350
1350
  };
1351
1351
  };
1352
1352
 
1353
1353
  const {
1354
- invoke: invoke$6,
1355
- set: set$a
1356
- } = create$1(6010);
1354
+ invoke: invoke$5,
1355
+ set: set$9
1356
+ } = create(6010);
1357
1357
 
1358
1358
  const Web = 1;
1359
1359
  const Electron = 2;
@@ -1361,57 +1361,19 @@ const Remote = 3;
1361
1361
  const Test = 4;
1362
1362
 
1363
1363
  const ErrorWorker = 3308;
1364
- const ExtensionHostWorker = 44;
1365
1364
  const FileSystemWorker = 209;
1366
1365
  const RendererWorker = 1;
1367
1366
  const SharedProcess = 1492;
1368
1367
 
1369
1368
  const {
1370
- invoke: invoke$5,
1371
- set: set$9
1372
- } = create$1(ErrorWorker);
1373
-
1374
- const {
1375
- dispose,
1376
- invoke: invoke$4,
1377
- invokeAndTransfer: invokeAndTransfer$2,
1378
- registerMockRpc,
1379
- set: set$8
1380
- } = create$1(ExtensionHostWorker);
1381
- const executeReferenceProvider = async (id, offset) => {
1382
- // @ts-ignore
1383
- return invoke$4('ExtensionHostReference.executeReferenceProvider', id, offset);
1384
- };
1385
- const executeFileReferenceProvider = async id => {
1386
- // @ts-ignore
1387
- return invoke$4('ExtensionHostReference.executeFileReferenceProvider', id);
1388
- };
1389
- const getRuntimeStatus$2 = async extensionId => {
1390
- // @ts-ignore
1391
- return invoke$4('ExtensionHost.getRuntimeStatus', extensionId);
1392
- };
1393
- const getEnabledOutputProviderIds = async () => {
1394
- const channels = await invoke$4('Output.getEnabledProviders');
1395
- return channels;
1396
- };
1397
-
1398
- const ExtensionHost = {
1399
- __proto__: null,
1400
- dispose,
1401
- executeFileReferenceProvider,
1402
- executeReferenceProvider,
1403
- getEnabledOutputProviderIds,
1404
- getRuntimeStatus: getRuntimeStatus$2,
1405
1369
  invoke: invoke$4,
1406
- invokeAndTransfer: invokeAndTransfer$2,
1407
- registerMockRpc,
1408
1370
  set: set$8
1409
- };
1371
+ } = create(ErrorWorker);
1410
1372
 
1411
1373
  const {
1412
1374
  invoke: invoke$3,
1413
1375
  set: set$7
1414
- } = create$1(FileSystemWorker);
1376
+ } = create(FileSystemWorker);
1415
1377
  const readFile$1 = async uri => {
1416
1378
  return invoke$3('FileSystem.readFile', uri);
1417
1379
  };
@@ -1429,7 +1391,7 @@ const {
1429
1391
  invoke: invoke$2,
1430
1392
  invokeAndTransfer: invokeAndTransfer$1,
1431
1393
  set: set$6
1432
- } = create$1(RendererWorker);
1394
+ } = create(RendererWorker);
1433
1395
  const sendMessagePortToAuthWorker = async (port, rpcId) => {
1434
1396
  const command = 'HandleMessagePort.handleMessagePort';
1435
1397
  await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToAuthWorker', port, command, rpcId);
@@ -1446,10 +1408,6 @@ const sendMessagePortToFileSystemWorker$1 = async (port, rpcId) => {
1446
1408
  const command = 'FileSystem.handleMessagePort';
1447
1409
  await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToFileSystemWorker', port, command, rpcId);
1448
1410
  };
1449
- const sendMessagePortToExtensionHostWorker = async (port, rpcId = 0) => {
1450
- const command = 'HandleMessagePort.handleMessagePort2';
1451
- await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToExtensionHostWorker', port, command, rpcId);
1452
- };
1453
1411
  const sendMessagePortToSharedProcess = async port => {
1454
1412
  const command = 'HandleElectronMessagePort.handleElectronMessagePort';
1455
1413
  await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToSharedProcess', port, command, 0);
@@ -1458,22 +1416,9 @@ const sendMessagePortToSharedProcess = async port => {
1458
1416
  const {
1459
1417
  invoke: invoke$1,
1460
1418
  set: set$5
1461
- } = create$1(SharedProcess);
1462
-
1463
- const create = () => {
1464
- return {
1465
- finished: false
1466
- };
1467
- };
1468
- const cancel = token => {
1469
- token.finished = true;
1470
- };
1471
- const isCanceled = token => {
1472
- return token.finished;
1473
- };
1419
+ } = create(SharedProcess);
1474
1420
 
1475
1421
  const None = 0;
1476
- const Importing = 1;
1477
1422
  const Activating = 2;
1478
1423
  const Activated = 3;
1479
1424
  const Error$1 = 4;
@@ -1581,119 +1526,6 @@ const getErrorMessage = error => {
1581
1526
  return String(error);
1582
1527
  };
1583
1528
 
1584
- const baseName = path => {
1585
- const slashIndex = path.lastIndexOf('/');
1586
- return path.slice(slashIndex + 1);
1587
- };
1588
- const getExtensionId$4 = extension => {
1589
- if (extension && extension.id) {
1590
- return extension.id;
1591
- }
1592
- if (extension && extension.path) {
1593
- return baseName(extension.path);
1594
- }
1595
- return '<unknown>';
1596
- };
1597
-
1598
- const isImportErrorChrome = error => {
1599
- return Boolean(error && error instanceof Error && error.message.startsWith('Failed to fetch dynamically imported module'));
1600
- };
1601
-
1602
- const isImportErrorFirefox = error => {
1603
- return Boolean(error && error instanceof TypeError && error.message === 'error loading dynamically imported module');
1604
- };
1605
-
1606
- const isSyntaxError = error => {
1607
- return error instanceof SyntaxError;
1608
- };
1609
-
1610
- const isImportError = error => {
1611
- return isImportErrorChrome(error) || isImportErrorFirefox(error) || isSyntaxError(error);
1612
- };
1613
-
1614
- const sleep = duration => {
1615
- const {
1616
- promise,
1617
- resolve
1618
- } = Promise.withResolvers();
1619
- setTimeout(resolve, duration);
1620
- return promise;
1621
- };
1622
-
1623
- const NotFound = 404;
1624
-
1625
- const tryToGetActualImportErrorMessage = async (url, error) => {
1626
- let response;
1627
- try {
1628
- response = await fetch(url);
1629
- } catch (error) {
1630
- return `Failed to import ${url}: ${error}`;
1631
- }
1632
- if (response.ok) {
1633
- return `Failed to import ${url}: ${error}`;
1634
- }
1635
- switch (response.status) {
1636
- case NotFound:
1637
- return `Failed to import ${url}: Not found (404)`;
1638
- default:
1639
- return `Failed to import ${url}: ${error}`;
1640
- }
1641
- };
1642
-
1643
- // TODO make activation timeout configurable or remove it.
1644
- // some extension might do workspace indexing which could take some time
1645
- const activationTimeout = 10_000;
1646
- const rejectAfterTimeout = async (timeout, token) => {
1647
- await sleep(timeout);
1648
- if (isCanceled(token)) {
1649
- return;
1650
- }
1651
- throw new Error(`Activation timeout of ${timeout}ms exceeded`);
1652
- };
1653
- const activate = async (extensionId, extension, extensionHost) => {
1654
- await extensionHost.invoke('ExtensionHost.activateExtension3', extensionId, extension);
1655
- };
1656
- const activateExtension2 = async (extensionId, extension, absolutePath, extensionHost = ExtensionHost) => {
1657
- string(extensionId);
1658
- object(extension);
1659
- string(absolutePath);
1660
- const token = create();
1661
- try {
1662
- const startTime = performance.now();
1663
- updateRuntimeStatus(extensionId, {
1664
- activationStartTime: startTime,
1665
- status: Activating
1666
- });
1667
- await Promise.race([activate(extensionId, extension, extensionHost), rejectAfterTimeout(activationTimeout, token)]);
1668
- const endTime = performance.now();
1669
- const time = endTime - startTime;
1670
- updateRuntimeStatus(extensionId, {
1671
- activationEndTime: endTime,
1672
- activationTime: time,
1673
- status: Activated
1674
- });
1675
- } catch (error) {
1676
- const id = getExtensionId$4(extension);
1677
- let activationError = error;
1678
- if (isImportError(error)) {
1679
- const actualErrorMessage = await tryToGetActualImportErrorMessage(absolutePath, error);
1680
- activationError = new Error(`Failed to activate extension ${id}: ${actualErrorMessage}`, {
1681
- cause: error
1682
- });
1683
- }
1684
- updateRuntimeStatus(extensionId, {
1685
- error: getErrorMessage(activationError),
1686
- status: Error$1
1687
- });
1688
- if (activationError !== error) {
1689
- throw activationError;
1690
- }
1691
- throw new VError(activationError, `Failed to activate extension ${id}`);
1692
- } finally {
1693
- cancel(token);
1694
- }
1695
- };
1696
-
1697
1529
  const commandMapRef = {};
1698
1530
 
1699
1531
  const extensionIds = new Set();
@@ -1896,7 +1728,7 @@ const createIsolatedExtensionHostWorker = async (extensionId, absolutePath, work
1896
1728
  return bindCommandMap(rpc, commandMap);
1897
1729
  };
1898
1730
  const createWorker = (extensionId, absolutePath, workerName, contentSecurityPolicy) => {
1899
- return createIsolatedExtensionHostWorker(extensionId, absolutePath, workerName, contentSecurityPolicy, create$7, invokeAndTransfer);
1731
+ return createIsolatedExtensionHostWorker(extensionId, absolutePath, workerName, contentSecurityPolicy, create$6, invokeAndTransfer);
1900
1732
  };
1901
1733
  const createAndStoreRpc = async (extensionId, absolutePath, workerName, contentSecurityPolicy, create) => {
1902
1734
  const rpc = await create(extensionId, absolutePath, workerName, contentSecurityPolicy);
@@ -2009,48 +1841,6 @@ const handleRpcInfos = (extension, platform) => {
2009
1841
  }
2010
1842
  };
2011
1843
 
2012
- const importExtension = async (extensionId, absolutePath, activationEvent, extensionHost = ExtensionHost) => {
2013
- try {
2014
- string(absolutePath);
2015
- const startTime = performance.now();
2016
- setRuntimeStatus({
2017
- activationEndTime: 0,
2018
- activationEvent: activationEvent,
2019
- activationStartTime: performance.now(),
2020
- activationTime: 0,
2021
- id: extensionId,
2022
- importEndTime: 0,
2023
- importStartTime: startTime,
2024
- importTime: 0,
2025
- status: Importing
2026
- });
2027
- try {
2028
- await extensionHost.invoke('ExtensionHost.importExtension2', extensionId, absolutePath);
2029
- const endTime = performance.now();
2030
- const time = endTime - startTime;
2031
- updateRuntimeStatus(extensionId, {
2032
- importEndTime: endTime,
2033
- importTime: time
2034
- });
2035
- } catch (error) {
2036
- let importError = error;
2037
- if (isImportError(error)) {
2038
- const actualErrorMessage = await tryToGetActualImportErrorMessage(absolutePath, error);
2039
- importError = new Error(actualErrorMessage, {
2040
- cause: error
2041
- });
2042
- }
2043
- updateRuntimeStatus(extensionId, {
2044
- error: getErrorMessage(importError),
2045
- status: Error$1
2046
- });
2047
- throw importError;
2048
- }
2049
- } catch (error) {
2050
- throw new VError(error, `Failed to import extension ${extensionId}`);
2051
- }
2052
- };
2053
-
2054
1844
  const NewLine = '\n';
2055
1845
  const Slash = '/';
2056
1846
 
@@ -2064,15 +1854,13 @@ const isExtensionIsolated = extension => {
2064
1854
  };
2065
1855
 
2066
1856
  const activateExtension3 = async (extension, absolutePath, activationEvent, platform) => {
2067
- handleRpcInfos(extension, platform);
2068
1857
  const extensionId = extension.id || interExtensionId(extension.uri);
2069
- if (isExtensionIsolated(extension)) {
2070
- const contentSecurityPolicy = getContentSecurityPolicy(extension.contentSecurityPolicy);
2071
- await activateIsolatedExtension(extensionId, absolutePath, extension.workerName || '', contentSecurityPolicy, activationEvent);
2072
- return;
1858
+ if (!isExtensionIsolated(extension)) {
1859
+ throw new Error(`Extension ${extensionId} does not use the isolated extension API`);
2073
1860
  }
2074
- await importExtension(extensionId, absolutePath, activationEvent);
2075
- await activateExtension2(extensionId, extension, absolutePath);
1861
+ handleRpcInfos(extension, platform);
1862
+ const contentSecurityPolicy = getContentSecurityPolicy(extension.contentSecurityPolicy);
1863
+ await activateIsolatedExtension(extensionId, absolutePath, extension.workerName || '', contentSecurityPolicy, activationEvent);
2076
1864
  };
2077
1865
 
2078
1866
  const getExtensionAbsolutePath = (id, isWeb, isBuiltin, path, relativePath, origin, platform, assetDir) => {
@@ -3239,6 +3027,79 @@ const readFile = uri => {
3239
3027
  return readFile$1(uri);
3240
3028
  };
3241
3029
 
3030
+ /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
3031
+
3032
+ const protocol = 'extension-output://';
3033
+ const hasOutputChannels = extension => {
3034
+ return !extension.disabled && isExtensionIsolated(extension) && Array.isArray(extension.outputChannels) && extension.outputChannels.length > 0;
3035
+ };
3036
+ const getOutputChannelUri = (extensionId, outputChannelId) => {
3037
+ return `${protocol}${encodeURIComponent(extensionId)}/${encodeURIComponent(outputChannelId)}`;
3038
+ };
3039
+ const getRegisteredOutputChannelIds = snapshot => {
3040
+ if (!snapshot || !Array.isArray(snapshot.outputChannels)) {
3041
+ return new Set();
3042
+ }
3043
+ return new Set(snapshot.outputChannels.map(outputChannel => outputChannel.id).filter(id => typeof id === 'string'));
3044
+ };
3045
+ const getExtensionOutputChannelProviders = async (extension, assetDir, platform) => {
3046
+ const extensionId = getExtensionId$1(extension);
3047
+ const rpc = await getRpc$1(extension, assetDir, platform);
3048
+ const snapshot = await rpc.invoke('ExtensionApi.getOutputChannelRegistrySnapshot');
3049
+ const registeredIds = getRegisteredOutputChannelIds(snapshot);
3050
+ const outputChannels = extension.outputChannels || [];
3051
+ return outputChannels.filter(outputChannel => typeof outputChannel.id === 'string' && typeof outputChannel.label === 'string' && registeredIds.has(outputChannel.id)).map(outputChannel => ({
3052
+ id: outputChannel.id,
3053
+ label: outputChannel.label,
3054
+ uri: getOutputChannelUri(extensionId, outputChannel.id)
3055
+ }));
3056
+ };
3057
+ const getOutputChannelProviders = async extensionsState => {
3058
+ const {
3059
+ assetDir,
3060
+ platform
3061
+ } = await getRuntimeContext('', extensionsState.platform);
3062
+ const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
3063
+ const outputExtensions = extensions.filter(hasOutputChannels);
3064
+ const providers = await Promise.all(outputExtensions.map(extension => getExtensionOutputChannelProviders(extension, assetDir, platform)));
3065
+ return providers.flat();
3066
+ };
3067
+ const parseOutputChannelUri = uri => {
3068
+ if (!uri.startsWith(protocol)) {
3069
+ throw new Error(`Invalid extension output uri ${uri}`);
3070
+ }
3071
+ const value = uri.slice(protocol.length);
3072
+ const separatorIndex = value.indexOf('/');
3073
+ if (separatorIndex === -1) {
3074
+ throw new Error(`Invalid extension output uri ${uri}`);
3075
+ }
3076
+ const extensionId = decodeURIComponent(value.slice(0, separatorIndex));
3077
+ const outputChannelId = decodeURIComponent(value.slice(separatorIndex + 1));
3078
+ if (!extensionId || !outputChannelId) {
3079
+ throw new Error(`Invalid extension output uri ${uri}`);
3080
+ }
3081
+ return [extensionId, outputChannelId];
3082
+ };
3083
+ const readOutputChannel = async (extensionsState, uri) => {
3084
+ const [extensionId, outputChannelId] = parseOutputChannelUri(uri);
3085
+ const {
3086
+ assetDir,
3087
+ platform
3088
+ } = await getRuntimeContext('', extensionsState.platform);
3089
+ const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
3090
+ const extension = extensions.find(candidate => getExtensionId$1(candidate) === extensionId && hasOutputChannels(candidate));
3091
+ const isContributed = extension?.outputChannels?.some(outputChannel => outputChannel.id === outputChannelId);
3092
+ if (!extension || !isContributed) {
3093
+ throw new Error(`Output channel ${outputChannelId} is not contributed by extension ${extensionId}`);
3094
+ }
3095
+ const rpc = await getRpc$1(extension, assetDir, platform);
3096
+ const logs = await rpc.invoke('ExtensionApi.getOutputChannelLogs', outputChannelId);
3097
+ if (typeof logs !== 'string') {
3098
+ throw new TypeError(`Output channel ${outputChannelId} is not registered by extension ${extensionId}`);
3099
+ }
3100
+ return logs;
3101
+ };
3102
+
3242
3103
  const instances = Object.create(null);
3243
3104
  const set$1 = (uid, instance) => {
3244
3105
  instances[uid] = instance;
@@ -3409,7 +3270,7 @@ const saveViewInstanceState = async (viewId, uid, assetDir, platform) => {
3409
3270
  };
3410
3271
 
3411
3272
  const getAccessToken = (options = {}) => {
3412
- return invoke$6('Auth.getAccessToken', options);
3273
+ return invoke$5('Auth.getAccessToken', options);
3413
3274
  };
3414
3275
 
3415
3276
  const transparent = (color, factor) => {
@@ -3715,7 +3576,7 @@ const createWebViewIpc = async webView => {
3715
3576
  port1,
3716
3577
  port2
3717
3578
  } = getPortTuple();
3718
- const rpcPromise = create$3({
3579
+ const rpcPromise = create$2({
3719
3580
  commandMap: {},
3720
3581
  isMessagePortOpen: false,
3721
3582
  messagePort: port2
@@ -3810,6 +3671,15 @@ const getRunningExtensionsFromState = (extensions, runtimeStatuses, assetDir, pl
3810
3671
  }).toSorted((a, b) => b.activationTime - a.activationTime);
3811
3672
  };
3812
3673
 
3674
+ const sleep = duration => {
3675
+ const {
3676
+ promise,
3677
+ resolve
3678
+ } = Promise.withResolvers();
3679
+ setTimeout(resolve, duration);
3680
+ return promise;
3681
+ };
3682
+
3813
3683
  const invokePing = async rpc => {
3814
3684
  try {
3815
3685
  await rpc.invoke('ExtensionApi.ping');
@@ -3987,7 +3857,7 @@ const handleFileChanges = async (changes = {}) => {
3987
3857
  };
3988
3858
 
3989
3859
  const handleMessagePort = async (port, rpcId) => {
3990
- await create$8({
3860
+ await create$7({
3991
3861
  commandMap: commandMapRef,
3992
3862
  messagePort: port
3993
3863
  });
@@ -3995,8 +3865,8 @@ const handleMessagePort = async (port, rpcId) => {
3995
3865
 
3996
3866
  const prefix = '[Extension] Uncaught Error: ';
3997
3867
  const handleUncaughtExtensionError = async error => {
3998
- const prettyError = await invoke$5('Errors.prepare', error);
3999
- await invoke$5('Errors.print', prettyError, prefix);
3868
+ const prettyError = await invoke$4('Errors.prepare', error);
3869
+ await invoke$4('Errors.print', prettyError, prefix);
4000
3870
  };
4001
3871
 
4002
3872
  const handleViewContextChange = async (uid, viewId, context) => {
@@ -4004,14 +3874,14 @@ const handleViewContextChange = async (uid, viewId, context) => {
4004
3874
  };
4005
3875
 
4006
3876
  const getRpcRemote = async () => {
4007
- const rpc = await create$4({
3877
+ const rpc = await create$3({
4008
3878
  commandMap: commandMapRef,
4009
3879
  type: 'shared-process'
4010
3880
  });
4011
3881
  return rpc;
4012
3882
  };
4013
3883
  const getRpcElectron = async () => {
4014
- const rpc = create$7({
3884
+ const rpc = create$6({
4015
3885
  commandMap: commandMapRef,
4016
3886
  async send(port) {
4017
3887
  await sendMessagePortToSharedProcess(port);
@@ -4138,8 +4008,6 @@ const wrapCommand = command => {
4138
4008
  const commandMap = {
4139
4009
  'ExtensionApi.readFile': readFile,
4140
4010
  'ExtensionHostQuickPick.showQuickPick': showQuickPick,
4141
- 'Extensions.activate2': activateExtension2,
4142
- 'Extensions.activate3': activateExtension3,
4143
4011
  'Extensions.activateByEvent': activateByEvent,
4144
4012
  'Extensions.addExtension': addExtension,
4145
4013
  'Extensions.addWebExtension': addWebExtension,
@@ -4181,6 +4049,7 @@ const commandMap = {
4181
4049
  'Extensions.getExtension': getExtension,
4182
4050
  'Extensions.getKeyBindings': getKeyBindings,
4183
4051
  'Extensions.getLanguages': getLanguages,
4052
+ 'Extensions.getOutputChannelProviders': wrapCommand(getOutputChannelProviders),
4184
4053
  'Extensions.getPreference': getPreference,
4185
4054
  'Extensions.getRemoteUrlForWebView': getRemoteUrlForWebView,
4186
4055
  'Extensions.getRpcInfo': getRpcInfo,
@@ -4196,10 +4065,10 @@ const commandMap = {
4196
4065
  'Extensions.handleMessagePort': handleMessagePort,
4197
4066
  'Extensions.handleUncaughtExtensionError': handleUncaughtExtensionError,
4198
4067
  'Extensions.handleViewContextChange': handleViewContextChange,
4199
- 'Extensions.importExtension': importExtension,
4200
4068
  'Extensions.initialize': initialize,
4201
4069
  'Extensions.install': installExtension,
4202
4070
  'Extensions.invalidateExtensionsCache': invalidateExtensionsCache,
4071
+ 'Extensions.readOutputChannel': wrapCommand(readOutputChannel),
4203
4072
  'Extensions.renderViewInstance': renderViewInstance,
4204
4073
  'Extensions.requestViewRerender': requestViewRerender,
4205
4074
  'Extensions.saveViewInstanceState': saveViewInstanceState,
@@ -4212,37 +4081,27 @@ const commandMap = {
4212
4081
  };
4213
4082
 
4214
4083
  const initializeAuthWorker = async () => {
4215
- const rpc = await create$6({
4084
+ const rpc = await create$5({
4216
4085
  commandMap: commandMapRef,
4217
4086
  async send(port) {
4218
4087
  await sendMessagePortToAuthWorker(port, 0);
4219
4088
  }
4220
4089
  });
4221
- set$a(rpc);
4090
+ set$9(rpc);
4222
4091
  };
4223
4092
 
4224
4093
  const initializeErrorWorker = async () => {
4225
- const rpc = await create$6({
4094
+ const rpc = await create$5({
4226
4095
  commandMap: commandMapRef,
4227
4096
  async send(port) {
4228
4097
  await sendMessagePortToErrorWorker(port, 0);
4229
4098
  }
4230
4099
  });
4231
- set$9(rpc);
4232
- };
4233
-
4234
- const initializeExtensionHostWorker = async () => {
4235
- const rpc = await create$6({
4236
- commandMap: commandMapRef,
4237
- async send(port) {
4238
- await sendMessagePortToExtensionHostWorker(port, 0);
4239
- }
4240
- });
4241
4100
  set$8(rpc);
4242
4101
  };
4243
4102
 
4244
4103
  const initializeFileSystemWorker = async () => {
4245
- const rpc = await create$6({
4104
+ const rpc = await create$5({
4246
4105
  commandMap: commandMapRef,
4247
4106
  async send(port) {
4248
4107
  await sendMessagePortToFileSystemWorker$1(port, 0);
@@ -4252,7 +4111,7 @@ const initializeFileSystemWorker = async () => {
4252
4111
  };
4253
4112
 
4254
4113
  const initializeIframeWorker = async () => {
4255
- const rpc = await create$6({
4114
+ const rpc = await create$5({
4256
4115
  commandMap: {},
4257
4116
  async send(port) {
4258
4117
  await sendMessagePortToIconThemeWorker(port, 0);
@@ -4262,7 +4121,7 @@ const initializeIframeWorker = async () => {
4262
4121
  };
4263
4122
 
4264
4123
  const initializeRendererWorker = async () => {
4265
- const rpc = await create$2({
4124
+ const rpc = await create$1({
4266
4125
  commandMap: commandMap
4267
4126
  });
4268
4127
  set$6(rpc);
@@ -4270,7 +4129,7 @@ const initializeRendererWorker = async () => {
4270
4129
 
4271
4130
  const listen = async () => {
4272
4131
  Object.assign(commandMapRef, commandMap);
4273
- await Promise.all([initializeRendererWorker(), initializeAuthWorker(), initializeErrorWorker(), initializeFileSystemWorker(), initializeIframeWorker(), initializeExtensionHostWorker()]);
4132
+ await Promise.all([initializeRendererWorker(), initializeAuthWorker(), initializeErrorWorker(), initializeFileSystemWorker(), initializeIframeWorker()]);
4274
4133
  };
4275
4134
 
4276
4135
  const main = async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.48.0",
3
+ "version": "4.50.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"