@lvce-editor/extension-management-worker 4.14.0 → 4.16.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.
@@ -1725,6 +1725,33 @@ const getExtensionAbsolutePath = (id, isWeb, isBuiltin, path, relativePath, orig
1725
1725
  return new URL('/remote' + path + '/' + relativePath, origin).href;
1726
1726
  };
1727
1727
 
1728
+ const isMissingAssetDir = assetDir => {
1729
+ return typeof assetDir !== 'string' || assetDir.length === 0;
1730
+ };
1731
+ const isMissingPlatform = platform => {
1732
+ return typeof platform !== 'number' || platform === 0;
1733
+ };
1734
+ const isStaticHttpAssetDir = assetDir => {
1735
+ return assetDir.startsWith('/') || assetDir.startsWith('http');
1736
+ };
1737
+ const isHttpLocation = () => {
1738
+ return Reflect.has(globalThis, 'location') && globalThis.location.protocol.startsWith('http');
1739
+ };
1740
+ const getRuntimeContext = async (assetDir, platform) => {
1741
+ const resolvedAssetDir = isMissingAssetDir(assetDir) ? await invoke$3('Layout.getAssetDir') : assetDir;
1742
+ const resolvedPlatform = isMissingPlatform(platform) ? await invoke$3('Layout.getPlatform') : platform;
1743
+ if (isHttpLocation() && isStaticHttpAssetDir(resolvedAssetDir)) {
1744
+ return {
1745
+ assetDir: resolvedAssetDir,
1746
+ platform: Web
1747
+ };
1748
+ }
1749
+ return {
1750
+ assetDir: resolvedAssetDir,
1751
+ platform: resolvedPlatform
1752
+ };
1753
+ };
1754
+
1728
1755
  const getJson$1 = async url => {
1729
1756
  try {
1730
1757
  const response = await fetch(url);
@@ -1752,6 +1779,30 @@ const getWebExtensions = async assetDir => {
1752
1779
 
1753
1780
  const WorkspaceConfigFolderName = '.lvce';
1754
1781
  const DisabledExtensionsFileName = 'disabled-extensions.json';
1782
+ const UriSchemeRegex = /^[a-zA-Z][a-zA-Z\d+.-]*:/;
1783
+ const WindowsDrivePathRegex = /^[a-zA-Z]:[\\/]/;
1784
+ const WindowsDriveSegmentRegex = /^[a-zA-Z]:$/;
1785
+ const encodePathSegment = (segment, index) => {
1786
+ if (index === 0 && WindowsDriveSegmentRegex.test(segment)) {
1787
+ return segment;
1788
+ }
1789
+ return encodeURIComponent(segment);
1790
+ };
1791
+ const encodeFilePath = path => {
1792
+ return path.split('/').map(encodePathSegment).join('/');
1793
+ };
1794
+ const toWorkspaceUri = workspacePath => {
1795
+ if (WindowsDrivePathRegex.test(workspacePath)) {
1796
+ return `file:///${encodeFilePath(workspacePath.replaceAll('\\', '/'))}`;
1797
+ }
1798
+ if (UriSchemeRegex.test(workspacePath)) {
1799
+ return workspacePath;
1800
+ }
1801
+ if (workspacePath.startsWith('/')) {
1802
+ return `file://${encodeFilePath(workspacePath)}`;
1803
+ }
1804
+ return workspacePath;
1805
+ };
1755
1806
  const joinUri = (base, ...parts) => {
1756
1807
  const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;
1757
1808
  return [normalizedBase, ...parts].join('/');
@@ -1760,7 +1811,8 @@ const stringifyJson = data => {
1760
1811
  return JSON.stringify(data, null, 2) + '\n';
1761
1812
  };
1762
1813
  const getWorkspaceUri = async () => {
1763
- return invoke$3('Workspace.getPath');
1814
+ const workspacePath = await invoke$3('Workspace.getPath');
1815
+ return toWorkspaceUri(workspacePath);
1764
1816
  };
1765
1817
  const getWorkspaceConfigDirUri = async () => {
1766
1818
  const workspaceUri = await getWorkspaceUri();
@@ -1850,17 +1902,15 @@ const getExtensionsWithWorkspaceState = async extensions => {
1850
1902
  return withWorkspaceDisabledState(extensions, workspaceDisabledIds);
1851
1903
  };
1852
1904
  const getAllExtensionsWithState = async (extensionsState, assetDir, platform) => {
1853
- if (typeof assetDir !== 'string') {
1854
- assetDir = await invoke$3('Layout.getAssetDir');
1855
- }
1856
- if (!platform) {
1857
- platform = await invoke$3('Layout.getPlatform');
1858
- }
1859
- string(assetDir);
1860
- number(platform);
1905
+ const {
1906
+ assetDir: resolvedAssetDir,
1907
+ platform: resolvedPlatform
1908
+ } = await getRuntimeContext(assetDir, platform);
1909
+ string(resolvedAssetDir);
1910
+ number(resolvedPlatform);
1861
1911
  const meta = extensionsState.webExtensions;
1862
- if (platform === Web) {
1863
- const webExtensions = await getWebExtensions(assetDir);
1912
+ if (resolvedPlatform === Web) {
1913
+ const webExtensions = await getWebExtensions(resolvedAssetDir);
1864
1914
  return getExtensionsWithWorkspaceState([...webExtensions, ...meta]);
1865
1915
  }
1866
1916
  const local = await invoke$2('ExtensionManagement.getAllExtensions');
@@ -1911,10 +1961,14 @@ const activateByEvent = async (event, assetDir, platform) => {
1911
1961
  hasActivatedExtensions: Object.keys(activatingExtensions).length > 0
1912
1962
  };
1913
1963
  }
1914
- const extensions = await getAllExtensions(assetDir, platform);
1964
+ const {
1965
+ assetDir: resolvedAssetDir,
1966
+ platform: resolvedPlatform
1967
+ } = await getRuntimeContext(assetDir, platform);
1968
+ const extensions = await getAllExtensions(resolvedAssetDir, resolvedPlatform);
1915
1969
  const matchingExtensions = extensions.filter(extension => matchesEvent(extension, event));
1916
1970
  for (const extension of matchingExtensions) {
1917
- await activateExtension(extension, event, assetDir, platform);
1971
+ await activateExtension(extension, event, resolvedAssetDir, resolvedPlatform);
1918
1972
  }
1919
1973
  return {
1920
1974
  error: undefined,
@@ -2267,9 +2321,9 @@ const executeRpcResolveCompletionItemProvider = async (rpc, textDocument, args)
2267
2321
  };
2268
2322
  const executeCompletionProvider = async (extensionsState, textDocument, ...args) => {
2269
2323
  const {
2324
+ assetDir,
2270
2325
  platform
2271
- } = extensionsState;
2272
- const assetDir = '';
2326
+ } = await getRuntimeContext('', extensionsState.platform);
2273
2327
  const extensions = await getMatchingExtensions$3(extensionsState, textDocument, assetDir, platform);
2274
2328
  const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
2275
2329
  const results = await Promise.all(rpcs.map(rpc => executeRpcCompletionProvider(rpc, textDocument, args)));
@@ -2277,9 +2331,9 @@ const executeCompletionProvider = async (extensionsState, textDocument, ...args)
2277
2331
  };
2278
2332
  const executeResolveCompletionItemProvider = async (extensionsState, textDocument, ...args) => {
2279
2333
  const {
2334
+ assetDir,
2280
2335
  platform
2281
- } = extensionsState;
2282
- const assetDir = '';
2336
+ } = await getRuntimeContext('', extensionsState.platform);
2283
2337
  const extensions = await getMatchingExtensions$3(extensionsState, textDocument, assetDir, platform);
2284
2338
  const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
2285
2339
  const results = await Promise.all(rpcs.map(rpc => executeRpcResolveCompletionItemProvider(rpc, textDocument, args)));
@@ -2300,9 +2354,9 @@ const executeRpcDiagnosticProvider = async (rpc, textDocument, args) => {
2300
2354
  };
2301
2355
  const executeDiagnosticProvider = async (extensionsState, textDocument, ...args) => {
2302
2356
  const {
2357
+ assetDir,
2303
2358
  platform
2304
- } = extensionsState;
2305
- const assetDir = '';
2359
+ } = await getRuntimeContext('', extensionsState.platform);
2306
2360
  const extensions = await getMatchingExtensions$2(extensionsState, textDocument, assetDir, platform);
2307
2361
  const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
2308
2362
  const results = await Promise.all(rpcs.map(rpc => executeRpcDiagnosticProvider(rpc, textDocument, args)));
@@ -2323,9 +2377,9 @@ const executeRpcFormattingProvider = async (rpc, textDocument, args) => {
2323
2377
  };
2324
2378
  const executeFormattingProvider = async (extensionsState, textDocument, ...args) => {
2325
2379
  const {
2380
+ assetDir,
2326
2381
  platform
2327
- } = extensionsState;
2328
- const assetDir = '';
2382
+ } = await getRuntimeContext('', extensionsState.platform);
2329
2383
  const extensions = await getMatchingExtensions$1(extensionsState, textDocument, assetDir, platform);
2330
2384
  const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
2331
2385
  const results = await Promise.all(rpcs.map(rpc => executeRpcFormattingProvider(rpc, textDocument, args)));
@@ -2346,9 +2400,9 @@ const executeRpcHoverProvider = async (rpc, textDocument, args) => {
2346
2400
  };
2347
2401
  const executeHoverProvider = async (extensionsState, textDocument, ...args) => {
2348
2402
  const {
2403
+ assetDir,
2349
2404
  platform
2350
- } = extensionsState;
2351
- const assetDir = '';
2405
+ } = await getRuntimeContext('', extensionsState.platform);
2352
2406
  const extensions = await getMatchingExtensions(extensionsState, textDocument, assetDir, platform);
2353
2407
  const rpcs = await Promise.all(extensions.map(extension => getRpc$1(extension, assetDir, platform)));
2354
2408
  const results = await Promise.all(rpcs.map(rpc => executeRpcHoverProvider(rpc, textDocument, args)));
@@ -2393,16 +2447,20 @@ const getExtensionForView = async (viewId, assetDir, platform) => {
2393
2447
  return extension;
2394
2448
  };
2395
2449
  const getRpcForView = async (viewId, assetDir, platform) => {
2396
- const extension = await getExtensionForView(viewId, assetDir, platform);
2450
+ const {
2451
+ assetDir: resolvedAssetDir,
2452
+ platform: resolvedPlatform
2453
+ } = await getRuntimeContext(assetDir, platform);
2454
+ const extension = await getExtensionForView(viewId, resolvedAssetDir, resolvedPlatform);
2397
2455
  const existingRpc = get$3(getExtensionId$1(extension));
2398
2456
  if (existingRpc) {
2399
2457
  return existingRpc;
2400
2458
  }
2401
- const activationResult = await activateByEvent(`onView:${viewId}`, assetDir, platform);
2459
+ const activationResult = await activateByEvent(`onView:${viewId}`, resolvedAssetDir, resolvedPlatform);
2402
2460
  if (activationResult.error) {
2403
2461
  throw activationResult.error;
2404
2462
  }
2405
- return getRpc$1(extension, assetDir, platform);
2463
+ return getRpc$1(extension, resolvedAssetDir, resolvedPlatform);
2406
2464
  };
2407
2465
  const getRpcForInstance = async (viewId, uid, assetDir, platform) => {
2408
2466
  const instance = get$1(uid);
@@ -2447,9 +2505,26 @@ const dispatchViewEvent = async (viewId, uid, event, assetDir, platform) => {
2447
2505
  }
2448
2506
  return rpc.invoke('ExtensionApi.dispatchViewEvent', uid, event);
2449
2507
  };
2508
+ const getViewMenuEntries = async (viewId, uid, menuId, assetDir, platform) => {
2509
+ const instance = get$1(uid);
2510
+ if (!instance || instance.status === 'error') {
2511
+ return [];
2512
+ }
2513
+ return instance.rpc.invoke('ExtensionApi.getViewMenuEntries', uid, menuId);
2514
+ };
2515
+ const getViewActions = async (viewId, uid, assetDir, platform) => {
2516
+ const instance = get$1(uid);
2517
+ if (!instance || instance.status === 'error') {
2518
+ return [];
2519
+ }
2520
+ return instance.rpc.invoke('ExtensionApi.getViewActions', uid);
2521
+ };
2450
2522
  const requestViewRerender = async uid => {
2451
2523
  await invoke$3('Viewlet.executeViewletCommand', uid, 'rerender');
2452
2524
  };
2525
+ const showViewContextMenu = async (uid, viewId, menuId, x, y) => {
2526
+ await invoke$3('ExtensionManagement.showViewContextMenu', uid, viewId, menuId, x, y);
2527
+ };
2453
2528
  const renderViewInstance = async (viewId, uid, assetDir, platform) => {
2454
2529
  const instance = get$1(uid);
2455
2530
  if (!instance || instance.status === 'error') {
@@ -2933,8 +3008,12 @@ const getViewsFromExtensionWorkers = async (extensions, assetDir, platform) => {
2933
3008
  return results.flat();
2934
3009
  };
2935
3010
  const getViews = async (assetDir, platform) => {
2936
- const extensions = await getAllExtensions(assetDir, platform);
2937
- return getViewsFromExtensionWorkers(extensions, assetDir, platform);
3011
+ const {
3012
+ assetDir: resolvedAssetDir,
3013
+ platform: resolvedPlatform
3014
+ } = await getRuntimeContext(assetDir, platform);
3015
+ const extensions = await getAllExtensions(resolvedAssetDir, resolvedPlatform);
3016
+ return getViewsFromExtensionWorkers(extensions, resolvedAssetDir, resolvedPlatform);
2938
3017
  };
2939
3018
 
2940
3019
  const StatusBarWorker = 200;
@@ -3114,6 +3193,8 @@ const commandMap = {
3114
3193
  'Extensions.getRpcInfo': getRpcInfo,
3115
3194
  'Extensions.getRuntimeStatus': getRuntimeStatus,
3116
3195
  'Extensions.getStatusBarItems': getStatusBarItems,
3196
+ 'Extensions.getViewActions': getViewActions,
3197
+ 'Extensions.getViewMenuEntries': getViewMenuEntries,
3117
3198
  'Extensions.getViews': getViews,
3118
3199
  'Extensions.handleMessagePort': handleMessagePort,
3119
3200
  'Extensions.handleViewContextChange': handleViewContextChange,
@@ -3126,6 +3207,7 @@ const commandMap = {
3126
3207
  'Extensions.saveViewInstanceState': saveViewInstanceState,
3127
3208
  'Extensions.sendMessagePortToFileSystemWorker': sendMessagePortToFileSystemWorker,
3128
3209
  'Extensions.setPreference': setPreference,
3210
+ 'Extensions.showViewContextMenu': showViewContextMenu,
3129
3211
  'Extensions.uninstall': uninstallExtension,
3130
3212
  'StatusBar.handleChange': handleChange
3131
3213
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.14.0",
3
+ "version": "4.16.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"