@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.
- package/dist/extensionManagementWorkerMain.js +137 -278
- package/package.json +1 -1
|
@@ -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
|
|
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
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
988
|
+
const create$8 = () => {
|
|
989
989
|
return ++id;
|
|
990
990
|
};
|
|
991
991
|
|
|
992
992
|
const registerPromise = map => {
|
|
993
|
-
const id = create$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
1149
|
+
const create$5 = async ({
|
|
1150
1150
|
commandMap,
|
|
1151
1151
|
isMessagePortOpen,
|
|
1152
1152
|
send
|
|
1153
1153
|
}) => {
|
|
1154
1154
|
return createSharedLazyRpc(() => {
|
|
1155
|
-
return create$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
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$
|
|
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$
|
|
1348
|
+
set$a(rpcId, rpc);
|
|
1349
1349
|
}
|
|
1350
1350
|
};
|
|
1351
1351
|
};
|
|
1352
1352
|
|
|
1353
1353
|
const {
|
|
1354
|
-
invoke: invoke$
|
|
1355
|
-
set: set$
|
|
1356
|
-
} = create
|
|
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
|
|
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
|
|
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
|
|
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$
|
|
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
|
-
|
|
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
|
-
|
|
2075
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
3999
|
-
await invoke$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
4090
|
+
set$9(rpc);
|
|
4222
4091
|
};
|
|
4223
4092
|
|
|
4224
4093
|
const initializeErrorWorker = async () => {
|
|
4225
|
-
const rpc = await create$
|
|
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$
|
|
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$
|
|
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$
|
|
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()
|
|
4132
|
+
await Promise.all([initializeRendererWorker(), initializeAuthWorker(), initializeErrorWorker(), initializeFileSystemWorker(), initializeIframeWorker()]);
|
|
4274
4133
|
};
|
|
4275
4134
|
|
|
4276
4135
|
const main = async () => {
|