@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$9 = (id, rpc) => {
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$9(rpcId, mockRpc);
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$9(rpcId, rpc);
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 => executeRpcCompletionProvider(rpc, textDocument, args)));
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 extensions = await getMatchingExtensions$4(extensionsState, textDocument, assetDir, platform);
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 () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.26.0",
3
+ "version": "4.28.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"