@lvce-editor/extension-management-worker 4.26.0 → 4.28.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.
|
@@ -1212,7 +1212,7 @@ const createMockRpc = ({
|
|
|
1212
1212
|
};
|
|
1213
1213
|
|
|
1214
1214
|
const rpcs$2 = Object.create(null);
|
|
1215
|
-
const set$
|
|
1215
|
+
const set$a = (id, rpc) => {
|
|
1216
1216
|
rpcs$2[id] = rpc;
|
|
1217
1217
|
};
|
|
1218
1218
|
const get$5 = id => {
|
|
@@ -1245,7 +1245,7 @@ const create$1 = rpcId => {
|
|
|
1245
1245
|
const mockRpc = createMockRpc({
|
|
1246
1246
|
commandMap
|
|
1247
1247
|
});
|
|
1248
|
-
set$
|
|
1248
|
+
set$a(rpcId, mockRpc);
|
|
1249
1249
|
// @ts-ignore
|
|
1250
1250
|
mockRpc[Symbol.dispose] = () => {
|
|
1251
1251
|
remove$1(rpcId);
|
|
@@ -1254,11 +1254,16 @@ const create$1 = rpcId => {
|
|
|
1254
1254
|
return mockRpc;
|
|
1255
1255
|
},
|
|
1256
1256
|
set(rpc) {
|
|
1257
|
-
set$
|
|
1257
|
+
set$a(rpcId, rpc);
|
|
1258
1258
|
}
|
|
1259
1259
|
};
|
|
1260
1260
|
};
|
|
1261
1261
|
|
|
1262
|
+
const {
|
|
1263
|
+
invoke: invoke$6,
|
|
1264
|
+
set: set$9
|
|
1265
|
+
} = create$1(6010);
|
|
1266
|
+
|
|
1262
1267
|
const Web = 1;
|
|
1263
1268
|
const Electron = 2;
|
|
1264
1269
|
const Remote = 3;
|
|
@@ -1334,6 +1339,10 @@ const {
|
|
|
1334
1339
|
invokeAndTransfer: invokeAndTransfer$1,
|
|
1335
1340
|
set: set$5
|
|
1336
1341
|
} = create$1(RendererWorker);
|
|
1342
|
+
const sendMessagePortToAuthWorker = async (port, rpcId) => {
|
|
1343
|
+
const command = 'HandleMessagePort.handleMessagePort';
|
|
1344
|
+
await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToAuthWorker', port, command, rpcId);
|
|
1345
|
+
};
|
|
1337
1346
|
const sendMessagePortToErrorWorker = async (port, rpcId) => {
|
|
1338
1347
|
const command = 'Errors.handleMessagePort';
|
|
1339
1348
|
await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToErrorWorker', port, command, rpcId);
|
|
@@ -2319,6 +2328,73 @@ const executeExtensionCommand = async (extensionsState, id, ...args) => {
|
|
|
2319
2328
|
};
|
|
2320
2329
|
};
|
|
2321
2330
|
|
|
2331
|
+
const hasUriScheme = value => {
|
|
2332
|
+
return /^[a-z][a-z\d+.-]*:/i.test(value);
|
|
2333
|
+
};
|
|
2334
|
+
const toExtensionBaseUri = extensionPath => {
|
|
2335
|
+
if (hasUriScheme(extensionPath)) {
|
|
2336
|
+
return extensionPath.endsWith('/') ? extensionPath : `${extensionPath}/`;
|
|
2337
|
+
}
|
|
2338
|
+
if (extensionPath.startsWith('/')) {
|
|
2339
|
+
return `file://${extensionPath}/`;
|
|
2340
|
+
}
|
|
2341
|
+
throw new Error(`Language server extension path must be an absolute path or URI`);
|
|
2342
|
+
};
|
|
2343
|
+
const resolveLanguageServerUri = (extension, languageServerUri) => {
|
|
2344
|
+
if (languageServerUri.startsWith('/')) {
|
|
2345
|
+
return `file://${languageServerUri}`;
|
|
2346
|
+
}
|
|
2347
|
+
if (hasUriScheme(languageServerUri)) {
|
|
2348
|
+
return languageServerUri;
|
|
2349
|
+
}
|
|
2350
|
+
const extensionPath = extension.uri || extension.path || '';
|
|
2351
|
+
return new URL(languageServerUri, toExtensionBaseUri(extensionPath)).href;
|
|
2352
|
+
};
|
|
2353
|
+
const getContribution = (extension, languageId) => {
|
|
2354
|
+
return extension.languageServers?.find(contribution => contribution.languageId === languageId);
|
|
2355
|
+
};
|
|
2356
|
+
const getRegisteredLanguageServer = (snapshot, contribution, languageId) => {
|
|
2357
|
+
const languageServer = snapshot.languageServers.find(registered => registered.id === contribution.id && registered.languageId === languageId);
|
|
2358
|
+
if (!languageServer) {
|
|
2359
|
+
throw new Error(`language server ${contribution.id || '<unknown>'} is contributed in extension.json but not registered`);
|
|
2360
|
+
}
|
|
2361
|
+
return languageServer;
|
|
2362
|
+
};
|
|
2363
|
+
const sanitizeCompletionItem = item => {
|
|
2364
|
+
if (!item || typeof item !== 'object' || typeof item.label !== 'string') {
|
|
2365
|
+
return undefined;
|
|
2366
|
+
}
|
|
2367
|
+
const snippet = item.insertText || item.textEdit?.newText || item.label;
|
|
2368
|
+
return {
|
|
2369
|
+
...item,
|
|
2370
|
+
flags: 0,
|
|
2371
|
+
kind: typeof item.kind === 'number' ? item.kind : 0,
|
|
2372
|
+
label: item.label,
|
|
2373
|
+
matches: [],
|
|
2374
|
+
snippet
|
|
2375
|
+
};
|
|
2376
|
+
};
|
|
2377
|
+
const executeLanguageServerCompletion = async (rpc, extension, textDocument, offset) => {
|
|
2378
|
+
if (typeof textDocument.text !== 'string' || typeof textDocument.uri !== 'string') {
|
|
2379
|
+
return [];
|
|
2380
|
+
}
|
|
2381
|
+
const contribution = getContribution(extension, textDocument.languageId);
|
|
2382
|
+
if (!contribution) {
|
|
2383
|
+
return [];
|
|
2384
|
+
}
|
|
2385
|
+
const snapshot = await rpc.invoke('ExtensionApi.getLanguageServerRegistrySnapshot');
|
|
2386
|
+
const languageServer = getRegisteredLanguageServer(snapshot, contribution, textDocument.languageId);
|
|
2387
|
+
const uri = resolveLanguageServerUri(extension, languageServer.uri);
|
|
2388
|
+
const result = await invoke$1('LanguageServer.complete', {
|
|
2389
|
+
argv: languageServer.argv,
|
|
2390
|
+
id: `${extension.id || extension.uri || extension.path || 'extension'}.${languageServer.id}`,
|
|
2391
|
+
offset,
|
|
2392
|
+
textDocument,
|
|
2393
|
+
uri
|
|
2394
|
+
});
|
|
2395
|
+
return result.map(sanitizeCompletionItem).filter(item => item !== undefined);
|
|
2396
|
+
};
|
|
2397
|
+
|
|
2322
2398
|
const getOrigin = () => {
|
|
2323
2399
|
return globalThis.location?.origin || 'http://localhost';
|
|
2324
2400
|
};
|
|
@@ -2344,13 +2420,23 @@ const getRpc$1 = async (extension, assetDir, platform) => {
|
|
|
2344
2420
|
const contributesCompletionProvider = (extension, languageId) => {
|
|
2345
2421
|
return Array.isArray(extension.completionProviders) && extension.completionProviders.some(provider => provider.languageId === languageId);
|
|
2346
2422
|
};
|
|
2423
|
+
const contributesLanguageServer = (extension, languageId) => {
|
|
2424
|
+
return Array.isArray(extension.languageServers) && extension.languageServers.some(languageServer => languageServer.languageId === languageId);
|
|
2425
|
+
};
|
|
2347
2426
|
const getMatchingExtensions$4 = async (extensionsState, textDocument, assetDir, platform) => {
|
|
2348
2427
|
const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
|
|
2349
|
-
return extensions.filter(extension => isExtensionIsolated(extension) && contributesCompletionProvider(extension, textDocument.languageId));
|
|
2428
|
+
return extensions.filter(extension => isExtensionIsolated(extension) && (contributesCompletionProvider(extension, textDocument.languageId) || contributesLanguageServer(extension, textDocument.languageId)));
|
|
2350
2429
|
};
|
|
2351
2430
|
const executeRpcCompletionProvider = async (rpc, textDocument, args) => {
|
|
2352
2431
|
return rpc.invoke('ExtensionApi.executeCompletionProvider', textDocument, ...args);
|
|
2353
2432
|
};
|
|
2433
|
+
const executeExtensionCompletionProvider = async (rpc, extension, textDocument, args) => {
|
|
2434
|
+
if (contributesLanguageServer(extension, textDocument.languageId)) {
|
|
2435
|
+
const offset = typeof args[0] === 'number' ? args[0] : 0;
|
|
2436
|
+
return executeLanguageServerCompletion(rpc, extension, textDocument, offset);
|
|
2437
|
+
}
|
|
2438
|
+
return executeRpcCompletionProvider(rpc, textDocument, args);
|
|
2439
|
+
};
|
|
2354
2440
|
const executeRpcResolveCompletionItemProvider = async (rpc, textDocument, args) => {
|
|
2355
2441
|
return rpc.invoke('ExtensionApi.executeResolveCompletionItemProvider', textDocument, ...args);
|
|
2356
2442
|
};
|
|
@@ -2361,7 +2447,7 @@ const executeCompletionProvider = async (extensionsState, textDocument, ...args)
|
|
|
2361
2447
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2362
2448
|
const extensions = await getMatchingExtensions$4(extensionsState, textDocument, assetDir, platform);
|
|
2363
2449
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2364
|
-
const results = await Promise.all(rpcs.map(rpc =>
|
|
2450
|
+
const results = await Promise.all(rpcs.map((rpc, index) => executeExtensionCompletionProvider(rpc, extensions[index], textDocument, args)));
|
|
2365
2451
|
return results[0] || [];
|
|
2366
2452
|
};
|
|
2367
2453
|
const executeResolveCompletionItemProvider = async (extensionsState, textDocument, ...args) => {
|
|
@@ -2369,7 +2455,8 @@ const executeResolveCompletionItemProvider = async (extensionsState, textDocumen
|
|
|
2369
2455
|
assetDir,
|
|
2370
2456
|
platform
|
|
2371
2457
|
} = await getRuntimeContext('', extensionsState.platform);
|
|
2372
|
-
const
|
|
2458
|
+
const matchingExtensions = await getMatchingExtensions$4(extensionsState, textDocument, assetDir, platform);
|
|
2459
|
+
const extensions = matchingExtensions.filter(extension => contributesCompletionProvider(extension, textDocument.languageId));
|
|
2373
2460
|
const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
|
|
2374
2461
|
const results = await Promise.all(rpcs.map(rpc => executeRpcResolveCompletionItemProvider(rpc, textDocument, args)));
|
|
2375
2462
|
return results[0];
|
|
@@ -2648,6 +2735,10 @@ const saveViewInstanceState = async (viewId, uid, assetDir, platform) => {
|
|
|
2648
2735
|
return rpc.invoke('ExtensionApi.saveViewInstanceState', uid);
|
|
2649
2736
|
};
|
|
2650
2737
|
|
|
2738
|
+
const getAccessToken = () => {
|
|
2739
|
+
return invoke$6('Auth.getAccessToken');
|
|
2740
|
+
};
|
|
2741
|
+
|
|
2651
2742
|
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
2652
2743
|
const warn = (...args) => {
|
|
2653
2744
|
console.warn(...args);
|
|
@@ -3317,6 +3408,7 @@ const commandMap = {
|
|
|
3317
3408
|
'Extensions.executeLanguageProvider': wrapCommand(executeLanguageProvider),
|
|
3318
3409
|
'Extensions.executeOrganizeImportsProvider': wrapCommand(executeOrganizeImportsProvider),
|
|
3319
3410
|
'Extensions.executeResolveCompletionItemProvider': wrapCommand(executeResolveCompletionItemProvider),
|
|
3411
|
+
'Extensions.getAccessToken': getAccessToken,
|
|
3320
3412
|
'Extensions.getAllExtensions': getAllExtensions,
|
|
3321
3413
|
'Extensions.getColorThemeCss': getColorThemeCss,
|
|
3322
3414
|
'Extensions.getColorThemeCssFromJson': getColorThemeCssFromJson,
|
|
@@ -3354,6 +3446,16 @@ const commandMap = {
|
|
|
3354
3446
|
'StatusBar.handleChange': handleChange
|
|
3355
3447
|
};
|
|
3356
3448
|
|
|
3449
|
+
const initializeAuthWorker = async () => {
|
|
3450
|
+
const rpc = await create$6({
|
|
3451
|
+
commandMap: commandMapRef,
|
|
3452
|
+
async send(port) {
|
|
3453
|
+
await sendMessagePortToAuthWorker(port, 0);
|
|
3454
|
+
}
|
|
3455
|
+
});
|
|
3456
|
+
set$9(rpc);
|
|
3457
|
+
};
|
|
3458
|
+
|
|
3357
3459
|
const initializeErrorWorker = async () => {
|
|
3358
3460
|
const rpc = await create$6({
|
|
3359
3461
|
commandMap: commandMapRef,
|
|
@@ -3403,7 +3505,7 @@ const initializeRendererWorker = async () => {
|
|
|
3403
3505
|
|
|
3404
3506
|
const listen = async () => {
|
|
3405
3507
|
Object.assign(commandMapRef, commandMap);
|
|
3406
|
-
await Promise.all([initializeRendererWorker(), initializeErrorWorker(), initializeFileSystemWorker(), initializeIframeWorker(), initializeExtensionHostWorker()]);
|
|
3508
|
+
await Promise.all([initializeRendererWorker(), initializeAuthWorker(), initializeErrorWorker(), initializeFileSystemWorker(), initializeIframeWorker(), initializeExtensionHostWorker()]);
|
|
3407
3509
|
};
|
|
3408
3510
|
|
|
3409
3511
|
const main = async () => {
|