@lvce-editor/extension-management-worker 4.50.0 → 4.52.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 +409 -128
- package/package.json +1 -1
|
@@ -546,7 +546,7 @@ const waitForWebSocketToBeOpen = webSocket => {
|
|
|
546
546
|
open: Open
|
|
547
547
|
});
|
|
548
548
|
};
|
|
549
|
-
const create$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
988
|
+
const create$9 = () => {
|
|
989
989
|
return ++id;
|
|
990
990
|
};
|
|
991
991
|
|
|
992
992
|
const registerPromise = map => {
|
|
993
|
-
const id = create$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
1149
|
+
const create$6 = async ({
|
|
1150
1150
|
commandMap,
|
|
1151
1151
|
isMessagePortOpen,
|
|
1152
1152
|
send
|
|
1153
1153
|
}) => {
|
|
1154
1154
|
return createSharedLazyRpc(() => {
|
|
1155
|
-
return create$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
1305
|
+
const rpcs$3 = Object.create(null);
|
|
1306
1306
|
const set$a = (id, rpc) => {
|
|
1307
|
-
rpcs$
|
|
1307
|
+
rpcs$3[id] = rpc;
|
|
1308
1308
|
};
|
|
1309
1309
|
const get$6 = id => {
|
|
1310
|
-
return rpcs$
|
|
1310
|
+
return rpcs$3[id];
|
|
1311
1311
|
};
|
|
1312
1312
|
const remove$2 = id => {
|
|
1313
|
-
delete rpcs$
|
|
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$
|
|
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$
|
|
1369
|
+
invoke: invoke$5,
|
|
1370
1370
|
set: set$8
|
|
1371
|
-
} = create(ErrorWorker);
|
|
1371
|
+
} = create$1(ErrorWorker);
|
|
1372
1372
|
|
|
1373
1373
|
const {
|
|
1374
|
-
invoke: invoke$
|
|
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$
|
|
1378
|
+
return invoke$4('FileSystem.readFile', uri);
|
|
1379
1379
|
};
|
|
1380
1380
|
const writeFile = async (uri, content) => {
|
|
1381
|
-
return invoke$
|
|
1381
|
+
return invoke$4('FileSystem.writeFile', uri, content);
|
|
1382
1382
|
};
|
|
1383
1383
|
const mkdir = async uri => {
|
|
1384
|
-
return invoke$
|
|
1384
|
+
return invoke$4('FileSystem.mkdir', uri);
|
|
1385
1385
|
};
|
|
1386
1386
|
const exists = async uri => {
|
|
1387
|
-
return invoke$
|
|
1387
|
+
return invoke$4('FileSystem.exists', uri);
|
|
1388
1388
|
};
|
|
1389
1389
|
|
|
1390
1390
|
const {
|
|
1391
|
-
invoke: invoke$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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.
|
|
1660
|
-
return
|
|
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$
|
|
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$
|
|
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
|
|
1781
|
-
return
|
|
1911
|
+
const getOrigin = () => {
|
|
1912
|
+
return globalThis.location?.origin || 'http://localhost';
|
|
1782
1913
|
};
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
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');
|
|
1922
|
+
}
|
|
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;
|
|
1786
1999
|
}
|
|
1787
|
-
|
|
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$
|
|
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$
|
|
1985
|
-
const resolvedPlatform = shouldInferPlatform ? await invoke$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
2490
|
+
await invoke$3('ExtensionManagement.handleExtensionsCacheInvalidated', extensionId, disabled);
|
|
2255
2491
|
return;
|
|
2256
2492
|
}
|
|
2257
|
-
await invoke$
|
|
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$
|
|
2500
|
+
const statusBarVisible = await invoke$3('Layout.getStatusBarVisible');
|
|
2265
2501
|
if (!statusBarVisible) {
|
|
2266
2502
|
return;
|
|
2267
2503
|
}
|
|
2268
|
-
await invoke$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
2971
|
+
const result = await invoke$2('LanguageServer.diagnostic', {
|
|
2740
2972
|
argv: languageServer.argv,
|
|
2741
2973
|
id: languageServer.id,
|
|
2742
2974
|
...(rootUri && {
|
|
@@ -3080,7 +3312,7 @@ const parseOutputChannelUri = uri => {
|
|
|
3080
3312
|
}
|
|
3081
3313
|
return [extensionId, outputChannelId];
|
|
3082
3314
|
};
|
|
3083
|
-
const
|
|
3315
|
+
const resolveOutputChannel = async (extensionsState, uri) => {
|
|
3084
3316
|
const [extensionId, outputChannelId] = parseOutputChannelUri(uri);
|
|
3085
3317
|
const {
|
|
3086
3318
|
assetDir,
|
|
@@ -3093,6 +3325,29 @@ const readOutputChannel = async (extensionsState, uri) => {
|
|
|
3093
3325
|
throw new Error(`Output channel ${outputChannelId} is not contributed by extension ${extensionId}`);
|
|
3094
3326
|
}
|
|
3095
3327
|
const rpc = await getRpc$1(extension, assetDir, platform);
|
|
3328
|
+
return {
|
|
3329
|
+
extensionId,
|
|
3330
|
+
outputChannelId,
|
|
3331
|
+
rpc
|
|
3332
|
+
};
|
|
3333
|
+
};
|
|
3334
|
+
const clearOutputChannel = async (extensionsState, uri) => {
|
|
3335
|
+
const {
|
|
3336
|
+
extensionId,
|
|
3337
|
+
outputChannelId,
|
|
3338
|
+
rpc
|
|
3339
|
+
} = await resolveOutputChannel(extensionsState, uri);
|
|
3340
|
+
const didClear = await rpc.invoke('ExtensionApi.clearOutputChannel', outputChannelId);
|
|
3341
|
+
if (didClear !== true) {
|
|
3342
|
+
throw new TypeError(`Output channel ${outputChannelId} is not registered by extension ${extensionId}`);
|
|
3343
|
+
}
|
|
3344
|
+
};
|
|
3345
|
+
const readOutputChannel = async (extensionsState, uri) => {
|
|
3346
|
+
const {
|
|
3347
|
+
extensionId,
|
|
3348
|
+
outputChannelId,
|
|
3349
|
+
rpc
|
|
3350
|
+
} = await resolveOutputChannel(extensionsState, uri);
|
|
3096
3351
|
const logs = await rpc.invoke('ExtensionApi.getOutputChannelLogs', outputChannelId);
|
|
3097
3352
|
if (typeof logs !== 'string') {
|
|
3098
3353
|
throw new TypeError(`Output channel ${outputChannelId} is not registered by extension ${extensionId}`);
|
|
@@ -3240,10 +3495,10 @@ const getViewActionsDom = async (viewId, uid, assetDir, platform) => {
|
|
|
3240
3495
|
}
|
|
3241
3496
|
};
|
|
3242
3497
|
const requestViewRerender = async uid => {
|
|
3243
|
-
await invoke$
|
|
3498
|
+
await invoke$3('Viewlet.executeViewletCommand', uid, 'rerender');
|
|
3244
3499
|
};
|
|
3245
3500
|
const showViewContextMenu = async (uid, viewId, menuId, x, y) => {
|
|
3246
|
-
await invoke$
|
|
3501
|
+
await invoke$3('ExtensionManagement.showViewContextMenu', uid, viewId, menuId, x, y);
|
|
3247
3502
|
};
|
|
3248
3503
|
const renderViewInstance = async (viewId, uid, assetDir, platform) => {
|
|
3249
3504
|
const instance = get$1(uid);
|
|
@@ -3270,7 +3525,7 @@ const saveViewInstanceState = async (viewId, uid, assetDir, platform) => {
|
|
|
3270
3525
|
};
|
|
3271
3526
|
|
|
3272
3527
|
const getAccessToken = (options = {}) => {
|
|
3273
|
-
return invoke$
|
|
3528
|
+
return invoke$6('Auth.getAccessToken', options);
|
|
3274
3529
|
};
|
|
3275
3530
|
|
|
3276
3531
|
const transparent = (color, factor) => {
|
|
@@ -3407,7 +3662,7 @@ const getColorThemeCssCached = async (colorThemeId, platform, getData) => {
|
|
|
3407
3662
|
};
|
|
3408
3663
|
|
|
3409
3664
|
const readJson = url => {
|
|
3410
|
-
return invoke$
|
|
3665
|
+
return invoke$3('FileSystem.readJson', url);
|
|
3411
3666
|
};
|
|
3412
3667
|
|
|
3413
3668
|
const join = (pathSeparator, ...parts) => {
|
|
@@ -3576,7 +3831,7 @@ const createWebViewIpc = async webView => {
|
|
|
3576
3831
|
port1,
|
|
3577
3832
|
port2
|
|
3578
3833
|
} = getPortTuple();
|
|
3579
|
-
const rpcPromise = create$
|
|
3834
|
+
const rpcPromise = create$3({
|
|
3580
3835
|
commandMap: {},
|
|
3581
3836
|
isMessagePortOpen: false,
|
|
3582
3837
|
messagePort: port2
|
|
@@ -3857,7 +4112,7 @@ const handleFileChanges = async (changes = {}) => {
|
|
|
3857
4112
|
};
|
|
3858
4113
|
|
|
3859
4114
|
const handleMessagePort = async (port, rpcId) => {
|
|
3860
|
-
await create$
|
|
4115
|
+
await create$8({
|
|
3861
4116
|
commandMap: commandMapRef,
|
|
3862
4117
|
messagePort: port
|
|
3863
4118
|
});
|
|
@@ -3865,44 +4120,69 @@ const handleMessagePort = async (port, rpcId) => {
|
|
|
3865
4120
|
|
|
3866
4121
|
const prefix = '[Extension] Uncaught Error: ';
|
|
3867
4122
|
const handleUncaughtExtensionError = async error => {
|
|
3868
|
-
const prettyError = await invoke$
|
|
3869
|
-
await invoke$
|
|
4123
|
+
const prettyError = await invoke$5('Errors.prepare', error);
|
|
4124
|
+
await invoke$5('Errors.print', prettyError, prefix);
|
|
3870
4125
|
};
|
|
3871
4126
|
|
|
3872
4127
|
const handleViewContextChange = async (uid, viewId, context) => {
|
|
3873
|
-
await invoke$
|
|
4128
|
+
await invoke$3('ExtensionManagement.handleViewContextChange', uid, viewId, context);
|
|
3874
4129
|
};
|
|
3875
4130
|
|
|
3876
|
-
const
|
|
3877
|
-
|
|
4131
|
+
const defaultDependencies = {
|
|
4132
|
+
createLegacyWebSocketRpc: create$4,
|
|
4133
|
+
createTransferMessagePortRpc: create$7,
|
|
4134
|
+
createWebSocket(url, protocols) {
|
|
4135
|
+
return new WebSocket(url, [...protocols]);
|
|
4136
|
+
},
|
|
4137
|
+
createWebSocketRpc: create$5,
|
|
4138
|
+
invokeRenderer: invoke$3,
|
|
4139
|
+
sendMessagePortToSharedProcess: sendMessagePortToSharedProcess,
|
|
4140
|
+
setSharedProcess: set$5
|
|
4141
|
+
};
|
|
4142
|
+
const getRpcRemote = async dependencies => {
|
|
4143
|
+
try {
|
|
4144
|
+
const {
|
|
4145
|
+
protocols,
|
|
4146
|
+
url
|
|
4147
|
+
} = await dependencies.invokeRenderer('WebSocketCapability.create', 'shared-process');
|
|
4148
|
+
const webSocket = dependencies.createWebSocket(url, protocols);
|
|
4149
|
+
return dependencies.createWebSocketRpc({
|
|
4150
|
+
commandMap: commandMapRef,
|
|
4151
|
+
webSocket
|
|
4152
|
+
});
|
|
4153
|
+
} catch (error) {
|
|
4154
|
+
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))) {
|
|
4155
|
+
throw error;
|
|
4156
|
+
}
|
|
4157
|
+
}
|
|
4158
|
+
return dependencies.createLegacyWebSocketRpc({
|
|
3878
4159
|
commandMap: commandMapRef,
|
|
3879
4160
|
type: 'shared-process'
|
|
3880
4161
|
});
|
|
3881
|
-
return rpc;
|
|
3882
4162
|
};
|
|
3883
|
-
const getRpcElectron = async
|
|
3884
|
-
const rpc =
|
|
4163
|
+
const getRpcElectron = async dependencies => {
|
|
4164
|
+
const rpc = dependencies.createTransferMessagePortRpc({
|
|
3885
4165
|
commandMap: commandMapRef,
|
|
3886
4166
|
async send(port) {
|
|
3887
|
-
await sendMessagePortToSharedProcess(port);
|
|
4167
|
+
await dependencies.sendMessagePortToSharedProcess(port);
|
|
3888
4168
|
}
|
|
3889
4169
|
});
|
|
3890
4170
|
return rpc;
|
|
3891
4171
|
};
|
|
3892
|
-
const getRpc = async platform => {
|
|
4172
|
+
const getRpc = async (platform, dependencies) => {
|
|
3893
4173
|
// TODO create connection to shared process
|
|
3894
4174
|
if (platform === Remote) {
|
|
3895
|
-
return getRpcRemote();
|
|
4175
|
+
return getRpcRemote(dependencies);
|
|
3896
4176
|
}
|
|
3897
4177
|
if (platform === Electron) {
|
|
3898
|
-
return getRpcElectron();
|
|
4178
|
+
return getRpcElectron(dependencies);
|
|
3899
4179
|
}
|
|
3900
4180
|
return undefined;
|
|
3901
4181
|
};
|
|
3902
|
-
const initializeSharedProcess = async platform => {
|
|
3903
|
-
const rpc = await getRpc(platform);
|
|
4182
|
+
const initializeSharedProcess = async (platform, dependencies = defaultDependencies) => {
|
|
4183
|
+
const rpc = await getRpc(platform, dependencies);
|
|
3904
4184
|
if (rpc) {
|
|
3905
|
-
|
|
4185
|
+
dependencies.setSharedProcess(rpc);
|
|
3906
4186
|
}
|
|
3907
4187
|
};
|
|
3908
4188
|
|
|
@@ -3973,10 +4253,10 @@ const getLanguages = async (platform, assetDir) => {
|
|
|
3973
4253
|
};
|
|
3974
4254
|
|
|
3975
4255
|
const getPreference = async key => {
|
|
3976
|
-
return invoke$
|
|
4256
|
+
return invoke$3('Preferences.get', key);
|
|
3977
4257
|
};
|
|
3978
4258
|
const setPreference = async (key, value) => {
|
|
3979
|
-
await invoke$
|
|
4259
|
+
await invoke$3('Preferences.update', {
|
|
3980
4260
|
[key]: value
|
|
3981
4261
|
});
|
|
3982
4262
|
};
|
|
@@ -3990,7 +4270,7 @@ const sendMessagePortToFileSystemWorker = async port => {
|
|
|
3990
4270
|
};
|
|
3991
4271
|
|
|
3992
4272
|
const showQuickPick = async options => {
|
|
3993
|
-
return invoke$
|
|
4273
|
+
return invoke$3('ExtensionHostQuickPick.showQuickPick', options);
|
|
3994
4274
|
};
|
|
3995
4275
|
|
|
3996
4276
|
const uninstallExtension = async () => {
|
|
@@ -4011,6 +4291,7 @@ const commandMap = {
|
|
|
4011
4291
|
'Extensions.activateByEvent': activateByEvent,
|
|
4012
4292
|
'Extensions.addExtension': addExtension,
|
|
4013
4293
|
'Extensions.addWebExtension': addWebExtension,
|
|
4294
|
+
'Extensions.clearOutputChannel': wrapCommand(clearOutputChannel),
|
|
4014
4295
|
'Extensions.createViewInstance': createViewInstance,
|
|
4015
4296
|
'Extensions.createWebViewWorkerRpc': createWebViewWorkerRpc,
|
|
4016
4297
|
'Extensions.createWebViewWorkerRpc2': createWebViewWorkerRpc2,
|
|
@@ -4081,7 +4362,7 @@ const commandMap = {
|
|
|
4081
4362
|
};
|
|
4082
4363
|
|
|
4083
4364
|
const initializeAuthWorker = async () => {
|
|
4084
|
-
const rpc = await create$
|
|
4365
|
+
const rpc = await create$6({
|
|
4085
4366
|
commandMap: commandMapRef,
|
|
4086
4367
|
async send(port) {
|
|
4087
4368
|
await sendMessagePortToAuthWorker(port, 0);
|
|
@@ -4091,7 +4372,7 @@ const initializeAuthWorker = async () => {
|
|
|
4091
4372
|
};
|
|
4092
4373
|
|
|
4093
4374
|
const initializeErrorWorker = async () => {
|
|
4094
|
-
const rpc = await create$
|
|
4375
|
+
const rpc = await create$6({
|
|
4095
4376
|
commandMap: commandMapRef,
|
|
4096
4377
|
async send(port) {
|
|
4097
4378
|
await sendMessagePortToErrorWorker(port, 0);
|
|
@@ -4101,7 +4382,7 @@ const initializeErrorWorker = async () => {
|
|
|
4101
4382
|
};
|
|
4102
4383
|
|
|
4103
4384
|
const initializeFileSystemWorker = async () => {
|
|
4104
|
-
const rpc = await create$
|
|
4385
|
+
const rpc = await create$6({
|
|
4105
4386
|
commandMap: commandMapRef,
|
|
4106
4387
|
async send(port) {
|
|
4107
4388
|
await sendMessagePortToFileSystemWorker$1(port, 0);
|
|
@@ -4111,7 +4392,7 @@ const initializeFileSystemWorker = async () => {
|
|
|
4111
4392
|
};
|
|
4112
4393
|
|
|
4113
4394
|
const initializeIframeWorker = async () => {
|
|
4114
|
-
const rpc = await create$
|
|
4395
|
+
const rpc = await create$6({
|
|
4115
4396
|
commandMap: {},
|
|
4116
4397
|
async send(port) {
|
|
4117
4398
|
await sendMessagePortToIconThemeWorker(port, 0);
|
|
@@ -4121,7 +4402,7 @@ const initializeIframeWorker = async () => {
|
|
|
4121
4402
|
};
|
|
4122
4403
|
|
|
4123
4404
|
const initializeRendererWorker = async () => {
|
|
4124
|
-
const rpc = await create$
|
|
4405
|
+
const rpc = await create$2({
|
|
4125
4406
|
commandMap: commandMap
|
|
4126
4407
|
});
|
|
4127
4408
|
set$6(rpc);
|