@lvce-editor/extension-management-worker 4.51.0 → 4.52.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extensionManagementWorkerMain.js +412 -127
- 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');
|
|
1786
1922
|
}
|
|
1787
|
-
return
|
|
1923
|
+
return directive.replace(/;$/, '').trim().split(/\s+/);
|
|
1924
|
+
};
|
|
1925
|
+
const getWorkerUrls = absolutePath => {
|
|
1926
|
+
const applicationUrl = new URL(getOrigin());
|
|
1927
|
+
const workerUrl = new URL(absolutePath, applicationUrl);
|
|
1928
|
+
if (workerUrl.protocol !== 'http:' && workerUrl.protocol !== 'https:') {
|
|
1929
|
+
return {
|
|
1930
|
+
origin: applicationUrl.origin
|
|
1931
|
+
};
|
|
1932
|
+
}
|
|
1933
|
+
const webSocketProtocol = applicationUrl.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
1934
|
+
return {
|
|
1935
|
+
assetSource: new URL('./', workerUrl).href,
|
|
1936
|
+
capabilitySource: `${webSocketProtocol}//${applicationUrl.host}/websocket/capability`,
|
|
1937
|
+
origin: applicationUrl.origin
|
|
1938
|
+
};
|
|
1939
|
+
};
|
|
1940
|
+
const validateExternalConnectSource = (source, applicationOrigin) => {
|
|
1941
|
+
if (source.includes('*') || source === `'none'`) {
|
|
1942
|
+
throw new Error(`invalid isolated extension connect source ${source}`);
|
|
1943
|
+
}
|
|
1944
|
+
let url;
|
|
1945
|
+
try {
|
|
1946
|
+
url = new URL(source);
|
|
1947
|
+
} catch {
|
|
1948
|
+
throw new Error(`isolated extension connect source must be an absolute URL: ${source}`);
|
|
1949
|
+
}
|
|
1950
|
+
if (!['http:', 'https:', 'ws:', 'wss:'].includes(url.protocol) || !url.hostname || url.username || url.password) {
|
|
1951
|
+
throw new Error(`invalid isolated extension connect source ${source}`);
|
|
1952
|
+
}
|
|
1953
|
+
const applicationUrl = new URL(applicationOrigin);
|
|
1954
|
+
if (url.host === applicationUrl.host) {
|
|
1955
|
+
throw new Error(`isolated extensions cannot allow the application origin in connect-src`);
|
|
1956
|
+
}
|
|
1957
|
+
return source;
|
|
1958
|
+
};
|
|
1959
|
+
const addScriptSources = (scriptSources, sources) => {
|
|
1960
|
+
for (const source of sources) {
|
|
1961
|
+
if (!allowedScriptSources.has(source)) {
|
|
1962
|
+
throw new Error(`invalid isolated extension script source ${source}`);
|
|
1963
|
+
}
|
|
1964
|
+
scriptSources.add(source);
|
|
1965
|
+
}
|
|
1966
|
+
};
|
|
1967
|
+
const addConnectSources = (connectSources, sources, assetSource, origin) => {
|
|
1968
|
+
for (const source of sources) {
|
|
1969
|
+
if (source === `'self'`) {
|
|
1970
|
+
if (assetSource) {
|
|
1971
|
+
connectSources.add(assetSource);
|
|
1972
|
+
}
|
|
1973
|
+
} else {
|
|
1974
|
+
connectSources.add(validateExternalConnectSource(source, origin));
|
|
1975
|
+
}
|
|
1976
|
+
}
|
|
1977
|
+
};
|
|
1978
|
+
const validateDefaultSources = sources => {
|
|
1979
|
+
if (sources.length !== 1 || sources[0] !== `'none'`) {
|
|
1980
|
+
throw new Error(`isolated extension default-src must be 'none'`);
|
|
1981
|
+
}
|
|
1982
|
+
};
|
|
1983
|
+
const applyDirective = (directive, scriptSources, connectSources, assetSource, origin) => {
|
|
1984
|
+
const [name, ...sources] = parseDirective(directive);
|
|
1985
|
+
if (!name) {
|
|
1986
|
+
return;
|
|
1987
|
+
}
|
|
1988
|
+
if (name === 'default-src') {
|
|
1989
|
+
validateDefaultSources(sources);
|
|
1990
|
+
return;
|
|
1991
|
+
}
|
|
1992
|
+
if (name === 'script-src') {
|
|
1993
|
+
addScriptSources(scriptSources, sources);
|
|
1994
|
+
return;
|
|
1995
|
+
}
|
|
1996
|
+
if (name === 'connect-src') {
|
|
1997
|
+
addConnectSources(connectSources, sources, assetSource, origin);
|
|
1998
|
+
return;
|
|
1999
|
+
}
|
|
2000
|
+
if (reservedDirectives.has(name)) {
|
|
2001
|
+
throw new Error(`isolated extensions cannot override ${name}`);
|
|
2002
|
+
}
|
|
2003
|
+
};
|
|
2004
|
+
const getContentSecurityPolicy = (directives, absolutePath) => {
|
|
2005
|
+
const {
|
|
2006
|
+
assetSource,
|
|
2007
|
+
capabilitySource,
|
|
2008
|
+
origin
|
|
2009
|
+
} = getWorkerUrls(absolutePath);
|
|
2010
|
+
const scriptSources = new Set([`'self'`]);
|
|
2011
|
+
const connectSources = new Set();
|
|
2012
|
+
if (capabilitySource) {
|
|
2013
|
+
connectSources.add(capabilitySource);
|
|
2014
|
+
}
|
|
2015
|
+
if (assetSource) {
|
|
2016
|
+
connectSources.add(assetSource);
|
|
2017
|
+
}
|
|
2018
|
+
const manifestDirectives = directives || [];
|
|
2019
|
+
for (const directive of manifestDirectives) {
|
|
2020
|
+
applyDirective(directive, scriptSources, connectSources, assetSource, origin);
|
|
2021
|
+
}
|
|
2022
|
+
const connectDirective = connectSources.size > 0 ? [...connectSources].join(' ') : `'none'`;
|
|
2023
|
+
return `default-src 'none'; script-src ${[...scriptSources].join(' ')}; worker-src 'none'; child-src 'none'; connect-src ${connectDirective};`;
|
|
1788
2024
|
};
|
|
1789
2025
|
|
|
1790
2026
|
const rpcs = Object.create(null);
|
|
@@ -1859,7 +2095,7 @@ const activateExtension3 = async (extension, absolutePath, activationEvent, plat
|
|
|
1859
2095
|
throw new Error(`Extension ${extensionId} does not use the isolated extension API`);
|
|
1860
2096
|
}
|
|
1861
2097
|
handleRpcInfos(extension, platform);
|
|
1862
|
-
const contentSecurityPolicy = getContentSecurityPolicy(extension.contentSecurityPolicy);
|
|
2098
|
+
const contentSecurityPolicy = getContentSecurityPolicy(extension.contentSecurityPolicy, absolutePath);
|
|
1863
2099
|
await activateIsolatedExtension(extensionId, absolutePath, extension.workerName || '', contentSecurityPolicy, activationEvent);
|
|
1864
2100
|
};
|
|
1865
2101
|
|
|
@@ -1942,7 +2178,7 @@ const getWebDisabledExtensionIds = async () => {
|
|
|
1942
2178
|
};
|
|
1943
2179
|
const getRemoteDisabledExtensionIds = async () => {
|
|
1944
2180
|
try {
|
|
1945
|
-
const uri = await invoke$
|
|
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 && {
|
|
@@ -3022,6 +3254,16 @@ const executeSourceControlProvider = async (extensionsState, providerId, methodN
|
|
|
3022
3254
|
result
|
|
3023
3255
|
};
|
|
3024
3256
|
};
|
|
3257
|
+
const executeRequiredSourceControlProvider = async (extensionsState, providerId, methodName, ...args) => {
|
|
3258
|
+
const {
|
|
3259
|
+
found,
|
|
3260
|
+
result
|
|
3261
|
+
} = await executeSourceControlProvider(extensionsState, providerId, methodName, ...args);
|
|
3262
|
+
if (!found) {
|
|
3263
|
+
throw new Error('No source control provider found');
|
|
3264
|
+
}
|
|
3265
|
+
return result;
|
|
3266
|
+
};
|
|
3025
3267
|
|
|
3026
3268
|
const readFile = uri => {
|
|
3027
3269
|
return readFile$1(uri);
|
|
@@ -3263,10 +3505,10 @@ const getViewActionsDom = async (viewId, uid, assetDir, platform) => {
|
|
|
3263
3505
|
}
|
|
3264
3506
|
};
|
|
3265
3507
|
const requestViewRerender = async uid => {
|
|
3266
|
-
await invoke$
|
|
3508
|
+
await invoke$3('Viewlet.executeViewletCommand', uid, 'rerender');
|
|
3267
3509
|
};
|
|
3268
3510
|
const showViewContextMenu = async (uid, viewId, menuId, x, y) => {
|
|
3269
|
-
await invoke$
|
|
3511
|
+
await invoke$3('ExtensionManagement.showViewContextMenu', uid, viewId, menuId, x, y);
|
|
3270
3512
|
};
|
|
3271
3513
|
const renderViewInstance = async (viewId, uid, assetDir, platform) => {
|
|
3272
3514
|
const instance = get$1(uid);
|
|
@@ -3293,7 +3535,7 @@ const saveViewInstanceState = async (viewId, uid, assetDir, platform) => {
|
|
|
3293
3535
|
};
|
|
3294
3536
|
|
|
3295
3537
|
const getAccessToken = (options = {}) => {
|
|
3296
|
-
return invoke$
|
|
3538
|
+
return invoke$6('Auth.getAccessToken', options);
|
|
3297
3539
|
};
|
|
3298
3540
|
|
|
3299
3541
|
const transparent = (color, factor) => {
|
|
@@ -3430,7 +3672,7 @@ const getColorThemeCssCached = async (colorThemeId, platform, getData) => {
|
|
|
3430
3672
|
};
|
|
3431
3673
|
|
|
3432
3674
|
const readJson = url => {
|
|
3433
|
-
return invoke$
|
|
3675
|
+
return invoke$3('FileSystem.readJson', url);
|
|
3434
3676
|
};
|
|
3435
3677
|
|
|
3436
3678
|
const join = (pathSeparator, ...parts) => {
|
|
@@ -3599,7 +3841,7 @@ const createWebViewIpc = async webView => {
|
|
|
3599
3841
|
port1,
|
|
3600
3842
|
port2
|
|
3601
3843
|
} = getPortTuple();
|
|
3602
|
-
const rpcPromise = create$
|
|
3844
|
+
const rpcPromise = create$3({
|
|
3603
3845
|
commandMap: {},
|
|
3604
3846
|
isMessagePortOpen: false,
|
|
3605
3847
|
messagePort: port2
|
|
@@ -3880,7 +4122,7 @@ const handleFileChanges = async (changes = {}) => {
|
|
|
3880
4122
|
};
|
|
3881
4123
|
|
|
3882
4124
|
const handleMessagePort = async (port, rpcId) => {
|
|
3883
|
-
await create$
|
|
4125
|
+
await create$8({
|
|
3884
4126
|
commandMap: commandMapRef,
|
|
3885
4127
|
messagePort: port
|
|
3886
4128
|
});
|
|
@@ -3888,44 +4130,69 @@ const handleMessagePort = async (port, rpcId) => {
|
|
|
3888
4130
|
|
|
3889
4131
|
const prefix = '[Extension] Uncaught Error: ';
|
|
3890
4132
|
const handleUncaughtExtensionError = async error => {
|
|
3891
|
-
const prettyError = await invoke$
|
|
3892
|
-
await invoke$
|
|
4133
|
+
const prettyError = await invoke$5('Errors.prepare', error);
|
|
4134
|
+
await invoke$5('Errors.print', prettyError, prefix);
|
|
3893
4135
|
};
|
|
3894
4136
|
|
|
3895
4137
|
const handleViewContextChange = async (uid, viewId, context) => {
|
|
3896
|
-
await invoke$
|
|
4138
|
+
await invoke$3('ExtensionManagement.handleViewContextChange', uid, viewId, context);
|
|
3897
4139
|
};
|
|
3898
4140
|
|
|
3899
|
-
const
|
|
3900
|
-
|
|
4141
|
+
const defaultDependencies = {
|
|
4142
|
+
createLegacyWebSocketRpc: create$4,
|
|
4143
|
+
createTransferMessagePortRpc: create$7,
|
|
4144
|
+
createWebSocket(url, protocols) {
|
|
4145
|
+
return new WebSocket(url, [...protocols]);
|
|
4146
|
+
},
|
|
4147
|
+
createWebSocketRpc: create$5,
|
|
4148
|
+
invokeRenderer: invoke$3,
|
|
4149
|
+
sendMessagePortToSharedProcess: sendMessagePortToSharedProcess,
|
|
4150
|
+
setSharedProcess: set$5
|
|
4151
|
+
};
|
|
4152
|
+
const getRpcRemote = async dependencies => {
|
|
4153
|
+
try {
|
|
4154
|
+
const {
|
|
4155
|
+
protocols,
|
|
4156
|
+
url
|
|
4157
|
+
} = await dependencies.invokeRenderer('WebSocketCapability.create', 'shared-process');
|
|
4158
|
+
const webSocket = dependencies.createWebSocket(url, protocols);
|
|
4159
|
+
return dependencies.createWebSocketRpc({
|
|
4160
|
+
commandMap: commandMapRef,
|
|
4161
|
+
webSocket
|
|
4162
|
+
});
|
|
4163
|
+
} catch (error) {
|
|
4164
|
+
if (!(error instanceof Error && (error.message.includes('WebSocketCapability.create') || error.message.includes('module WebSocketCapability not found')) && /command not found|not found/i.test(error.message))) {
|
|
4165
|
+
throw error;
|
|
4166
|
+
}
|
|
4167
|
+
}
|
|
4168
|
+
return dependencies.createLegacyWebSocketRpc({
|
|
3901
4169
|
commandMap: commandMapRef,
|
|
3902
4170
|
type: 'shared-process'
|
|
3903
4171
|
});
|
|
3904
|
-
return rpc;
|
|
3905
4172
|
};
|
|
3906
|
-
const getRpcElectron = async
|
|
3907
|
-
const rpc =
|
|
4173
|
+
const getRpcElectron = async dependencies => {
|
|
4174
|
+
const rpc = dependencies.createTransferMessagePortRpc({
|
|
3908
4175
|
commandMap: commandMapRef,
|
|
3909
4176
|
async send(port) {
|
|
3910
|
-
await sendMessagePortToSharedProcess(port);
|
|
4177
|
+
await dependencies.sendMessagePortToSharedProcess(port);
|
|
3911
4178
|
}
|
|
3912
4179
|
});
|
|
3913
4180
|
return rpc;
|
|
3914
4181
|
};
|
|
3915
|
-
const getRpc = async platform => {
|
|
4182
|
+
const getRpc = async (platform, dependencies) => {
|
|
3916
4183
|
// TODO create connection to shared process
|
|
3917
4184
|
if (platform === Remote) {
|
|
3918
|
-
return getRpcRemote();
|
|
4185
|
+
return getRpcRemote(dependencies);
|
|
3919
4186
|
}
|
|
3920
4187
|
if (platform === Electron) {
|
|
3921
|
-
return getRpcElectron();
|
|
4188
|
+
return getRpcElectron(dependencies);
|
|
3922
4189
|
}
|
|
3923
4190
|
return undefined;
|
|
3924
4191
|
};
|
|
3925
|
-
const initializeSharedProcess = async platform => {
|
|
3926
|
-
const rpc = await getRpc(platform);
|
|
4192
|
+
const initializeSharedProcess = async (platform, dependencies = defaultDependencies) => {
|
|
4193
|
+
const rpc = await getRpc(platform, dependencies);
|
|
3927
4194
|
if (rpc) {
|
|
3928
|
-
|
|
4195
|
+
dependencies.setSharedProcess(rpc);
|
|
3929
4196
|
}
|
|
3930
4197
|
};
|
|
3931
4198
|
|
|
@@ -3996,10 +4263,10 @@ const getLanguages = async (platform, assetDir) => {
|
|
|
3996
4263
|
};
|
|
3997
4264
|
|
|
3998
4265
|
const getPreference = async key => {
|
|
3999
|
-
return invoke$
|
|
4266
|
+
return invoke$3('Preferences.get', key);
|
|
4000
4267
|
};
|
|
4001
4268
|
const setPreference = async (key, value) => {
|
|
4002
|
-
await invoke$
|
|
4269
|
+
await invoke$3('Preferences.update', {
|
|
4003
4270
|
[key]: value
|
|
4004
4271
|
});
|
|
4005
4272
|
};
|
|
@@ -4013,7 +4280,7 @@ const sendMessagePortToFileSystemWorker = async port => {
|
|
|
4013
4280
|
};
|
|
4014
4281
|
|
|
4015
4282
|
const showQuickPick = async options => {
|
|
4016
|
-
return invoke$
|
|
4283
|
+
return invoke$3('ExtensionHostQuickPick.showQuickPick', options);
|
|
4017
4284
|
};
|
|
4018
4285
|
|
|
4019
4286
|
const uninstallExtension = async () => {
|
|
@@ -4028,9 +4295,27 @@ const wrapCommand = command => {
|
|
|
4028
4295
|
return command(get$5(), ...args);
|
|
4029
4296
|
};
|
|
4030
4297
|
};
|
|
4298
|
+
const wrapSourceControlProviderCommand = methodName => {
|
|
4299
|
+
return wrapCommand((extensionsState, providerId, ...args) => {
|
|
4300
|
+
return executeRequiredSourceControlProvider(extensionsState, providerId, methodName, ...args);
|
|
4301
|
+
});
|
|
4302
|
+
};
|
|
4031
4303
|
const commandMap = {
|
|
4032
4304
|
'ExtensionApi.readFile': readFile,
|
|
4305
|
+
'ExtensionHost.sourceControlGetChangedFiles': wrapSourceControlProviderCommand('executeSourceControlGetChangedFiles'),
|
|
4033
4306
|
'ExtensionHostQuickPick.showQuickPick': showQuickPick,
|
|
4307
|
+
'ExtensionHostSourceControl.acceptInput': wrapSourceControlProviderCommand('executeSourceControlAcceptInput'),
|
|
4308
|
+
'ExtensionHostSourceControl.add': wrapSourceControlProviderCommand('executeSourceControlAdd'),
|
|
4309
|
+
'ExtensionHostSourceControl.discard': wrapSourceControlProviderCommand('executeSourceControlDiscard'),
|
|
4310
|
+
'ExtensionHostSourceControl.generateCommitMessage': wrapSourceControlProviderCommand('executeSourceControlGenerateCommitMessage'),
|
|
4311
|
+
'ExtensionHostSourceControl.getBadgeCount': wrapSourceControlProviderCommand('executeSourceControlGetBadgeCount'),
|
|
4312
|
+
'ExtensionHostSourceControl.getChangedFiles': wrapSourceControlProviderCommand('executeSourceControlGetChangedFiles'),
|
|
4313
|
+
'ExtensionHostSourceControl.getEnabledProviderIds': wrapCommand(getEnabledSourceControlProviderIds),
|
|
4314
|
+
'ExtensionHostSourceControl.getFeatures': wrapSourceControlProviderCommand('executeSourceControlGetFeatures'),
|
|
4315
|
+
'ExtensionHostSourceControl.getFileBefore': wrapSourceControlProviderCommand('executeSourceControlGetFileBefore'),
|
|
4316
|
+
'ExtensionHostSourceControl.getFileDecorations': wrapSourceControlProviderCommand('executeSourceControlGetFileDecorations'),
|
|
4317
|
+
'ExtensionHostSourceControl.getGroups': wrapSourceControlProviderCommand('executeSourceControlGetGroups'),
|
|
4318
|
+
'ExtensionHostSourceControl.getIconDefinitions': async () => [],
|
|
4034
4319
|
'Extensions.activateByEvent': activateByEvent,
|
|
4035
4320
|
'Extensions.addExtension': addExtension,
|
|
4036
4321
|
'Extensions.addWebExtension': addWebExtension,
|
|
@@ -4105,7 +4390,7 @@ const commandMap = {
|
|
|
4105
4390
|
};
|
|
4106
4391
|
|
|
4107
4392
|
const initializeAuthWorker = async () => {
|
|
4108
|
-
const rpc = await create$
|
|
4393
|
+
const rpc = await create$6({
|
|
4109
4394
|
commandMap: commandMapRef,
|
|
4110
4395
|
async send(port) {
|
|
4111
4396
|
await sendMessagePortToAuthWorker(port, 0);
|
|
@@ -4115,7 +4400,7 @@ const initializeAuthWorker = async () => {
|
|
|
4115
4400
|
};
|
|
4116
4401
|
|
|
4117
4402
|
const initializeErrorWorker = async () => {
|
|
4118
|
-
const rpc = await create$
|
|
4403
|
+
const rpc = await create$6({
|
|
4119
4404
|
commandMap: commandMapRef,
|
|
4120
4405
|
async send(port) {
|
|
4121
4406
|
await sendMessagePortToErrorWorker(port, 0);
|
|
@@ -4125,7 +4410,7 @@ const initializeErrorWorker = async () => {
|
|
|
4125
4410
|
};
|
|
4126
4411
|
|
|
4127
4412
|
const initializeFileSystemWorker = async () => {
|
|
4128
|
-
const rpc = await create$
|
|
4413
|
+
const rpc = await create$6({
|
|
4129
4414
|
commandMap: commandMapRef,
|
|
4130
4415
|
async send(port) {
|
|
4131
4416
|
await sendMessagePortToFileSystemWorker$1(port, 0);
|
|
@@ -4135,7 +4420,7 @@ const initializeFileSystemWorker = async () => {
|
|
|
4135
4420
|
};
|
|
4136
4421
|
|
|
4137
4422
|
const initializeIframeWorker = async () => {
|
|
4138
|
-
const rpc = await create$
|
|
4423
|
+
const rpc = await create$6({
|
|
4139
4424
|
commandMap: {},
|
|
4140
4425
|
async send(port) {
|
|
4141
4426
|
await sendMessagePortToIconThemeWorker(port, 0);
|
|
@@ -4145,7 +4430,7 @@ const initializeIframeWorker = async () => {
|
|
|
4145
4430
|
};
|
|
4146
4431
|
|
|
4147
4432
|
const initializeRendererWorker = async () => {
|
|
4148
|
-
const rpc = await create$
|
|
4433
|
+
const rpc = await create$2({
|
|
4149
4434
|
commandMap: commandMap
|
|
4150
4435
|
});
|
|
4151
4436
|
set$6(rpc);
|