@lvce-editor/extension-management-worker 4.12.0 → 4.14.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.
@@ -1453,7 +1453,7 @@ const baseName = path => {
1453
1453
  const slashIndex = path.lastIndexOf('/');
1454
1454
  return path.slice(slashIndex + 1);
1455
1455
  };
1456
- const getExtensionId$3 = extension => {
1456
+ const getExtensionId$4 = extension => {
1457
1457
  if (extension && extension.id) {
1458
1458
  return extension.id;
1459
1459
  }
@@ -1541,7 +1541,7 @@ const activateExtension2 = async (extensionId, extension, absolutePath, extensio
1541
1541
  status: Activated
1542
1542
  });
1543
1543
  } catch (error) {
1544
- const id = getExtensionId$3(extension);
1544
+ const id = getExtensionId$4(extension);
1545
1545
  if (isImportError(error)) {
1546
1546
  const actualErrorMessage = await tryToGetActualImportErrorMessage(absolutePath, error);
1547
1547
  throw new Error(`Failed to activate extension ${id}: ${actualErrorMessage}`, {
@@ -1876,14 +1876,14 @@ const runningExtensions = Object.create(null);
1876
1876
  const matchesEvent = (extension, event) => {
1877
1877
  return !extension.disabled && isExtensionIsolated(extension) && Array.isArray(extension.activation) && extension.activation.includes(event);
1878
1878
  };
1879
- const getExtensionId$2 = extension => {
1879
+ const getExtensionId$3 = extension => {
1880
1880
  return extension.id;
1881
1881
  };
1882
1882
  const getAbsolutePath$1 = (extension, assetDir, platform) => {
1883
1883
  return getExtensionAbsolutePath(extension.id, extension.isWeb, extension.builtin, extension.path || extension.uri, extension.browser, globalThis.location.origin, platform, assetDir);
1884
1884
  };
1885
1885
  const doActivateExtension = async (extension, absolutePath, event, platform) => {
1886
- const extensionId = getExtensionId$2(extension);
1886
+ const extensionId = getExtensionId$3(extension);
1887
1887
  try {
1888
1888
  await activateExtension3(extension, absolutePath, event, platform);
1889
1889
  runningExtensions[extensionId] = true;
@@ -1892,7 +1892,7 @@ const doActivateExtension = async (extension, absolutePath, event, platform) =>
1892
1892
  }
1893
1893
  };
1894
1894
  const activateExtension = async (extension, event, assetDir, platform) => {
1895
- const extensionId = getExtensionId$2(extension);
1895
+ const extensionId = getExtensionId$3(extension);
1896
1896
  if (runningExtensions[extensionId]) {
1897
1897
  return;
1898
1898
  }
@@ -2176,7 +2176,7 @@ const enableWorkspaceExtension = async id => {
2176
2176
 
2177
2177
  /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
2178
2178
 
2179
- const getExtensionId$1 = extension => {
2179
+ const getExtensionId$2 = extension => {
2180
2180
  return extension.id || interExtensionId(extension.uri || extension.path || '');
2181
2181
  };
2182
2182
  const contributesCommand = (extension, id) => {
@@ -2191,7 +2191,7 @@ const getRpcForCommand = async (extensionsState, id, platform) => {
2191
2191
  if (!extension) {
2192
2192
  return undefined;
2193
2193
  }
2194
- const extensionId = getExtensionId$1(extension);
2194
+ const extensionId = getExtensionId$2(extension);
2195
2195
  const existingRpc = get$3(extensionId);
2196
2196
  if (existingRpc) {
2197
2197
  return existingRpc;
@@ -2234,14 +2234,14 @@ const getOrigin = () => {
2234
2234
  return globalThis.location?.origin || 'http://localhost';
2235
2235
  };
2236
2236
 
2237
- const getExtensionId = extension => {
2237
+ const getExtensionId$1 = extension => {
2238
2238
  return extension.id || interExtensionId(extension.uri || extension.path || '');
2239
2239
  };
2240
2240
  const getAbsolutePath = (extension, assetDir, platform) => {
2241
- return getExtensionAbsolutePath(getExtensionId(extension), extension.isWeb === true, extension.builtin === true, extension.path || extension.uri || '', extension.browser || '', getOrigin(), platform, assetDir);
2241
+ return getExtensionAbsolutePath(getExtensionId$1(extension), extension.isWeb === true, extension.builtin === true, extension.path || extension.uri || '', extension.browser || '', getOrigin(), platform, assetDir);
2242
2242
  };
2243
2243
  const getRpc$1 = async (extension, assetDir, platform) => {
2244
- const extensionId = getExtensionId(extension);
2244
+ const extensionId = getExtensionId$1(extension);
2245
2245
  const existingRpc = get$3(extensionId);
2246
2246
  if (existingRpc) {
2247
2247
  return existingRpc;
@@ -2394,7 +2394,7 @@ const getExtensionForView = async (viewId, assetDir, platform) => {
2394
2394
  };
2395
2395
  const getRpcForView = async (viewId, assetDir, platform) => {
2396
2396
  const extension = await getExtensionForView(viewId, assetDir, platform);
2397
- const existingRpc = get$3(getExtensionId(extension));
2397
+ const existingRpc = get$3(getExtensionId$1(extension));
2398
2398
  if (existingRpc) {
2399
2399
  return existingRpc;
2400
2400
  }
@@ -2717,6 +2717,48 @@ const getExtension = async (id, assetDir, platform) => {
2717
2717
  return undefined;
2718
2718
  };
2719
2719
 
2720
+ const getExtensionId = extension => {
2721
+ return extension.id || interExtensionId(extension.uri || extension.path || '');
2722
+ };
2723
+ const toKeyBinding = (extension, keybinding) => {
2724
+ if (typeof keybinding.key !== 'string' || typeof keybinding.command !== 'string') {
2725
+ return undefined;
2726
+ }
2727
+ if (keybinding.when !== undefined && typeof keybinding.when !== 'string') {
2728
+ return undefined;
2729
+ }
2730
+ if (keybinding.args !== undefined && !Array.isArray(keybinding.args)) {
2731
+ return undefined;
2732
+ }
2733
+ return {
2734
+ ...(keybinding.args && {
2735
+ args: keybinding.args
2736
+ }),
2737
+ command: keybinding.command,
2738
+ extensionId: getExtensionId(extension),
2739
+ key: keybinding.key,
2740
+ ...(keybinding.when && {
2741
+ when: keybinding.when
2742
+ })
2743
+ };
2744
+ };
2745
+ const getKeyBindings = async (assetDir, platform) => {
2746
+ const extensions = await getAllExtensions(assetDir, platform);
2747
+ const keybindings = [];
2748
+ for (const extension of extensions) {
2749
+ if (!Array.isArray(extension.keybindings)) {
2750
+ continue;
2751
+ }
2752
+ for (const keybinding of extension.keybindings) {
2753
+ const normalized = toKeyBinding(extension, keybinding);
2754
+ if (normalized) {
2755
+ keybindings.push(normalized);
2756
+ }
2757
+ }
2758
+ }
2759
+ return keybindings;
2760
+ };
2761
+
2720
2762
  const getPortTuple = () => {
2721
2763
  const {
2722
2764
  port1,
@@ -2821,6 +2863,25 @@ const getCss = (extension, manifestView, assetDir, platform) => {
2821
2863
  browser: css
2822
2864
  }, assetDir, platform);
2823
2865
  };
2866
+ const isAbsoluteIcon = icon => {
2867
+ return icon.startsWith('http://') || icon.startsWith('https://') || icon.startsWith('file://') || icon.startsWith('/');
2868
+ };
2869
+ const isRelativeIconPath = icon => {
2870
+ return icon.startsWith('./') || icon.startsWith('../') || icon.includes('/') || /\.(?:bmp|gif|ico|jpe?g|png|svg|webp)$/i.test(icon);
2871
+ };
2872
+ const getIcon = (extension, manifestView, registeredView, assetDir, platform) => {
2873
+ const manifestIcon = manifestView?.icon;
2874
+ if (typeof manifestIcon === 'string' && manifestIcon.length > 0) {
2875
+ if (isAbsoluteIcon(manifestIcon) || !isRelativeIconPath(manifestIcon)) {
2876
+ return manifestIcon;
2877
+ }
2878
+ return getAbsolutePath({
2879
+ ...extension,
2880
+ browser: manifestIcon
2881
+ }, assetDir, platform);
2882
+ }
2883
+ return registeredView.icon || '';
2884
+ };
2824
2885
  const getIframe = (extension, manifestView, assetDir, platform) => {
2825
2886
  const iframe = manifestView?.iframe;
2826
2887
  if (!iframe || typeof iframe.path !== 'string' || iframe.path.length === 0) {
@@ -2844,8 +2905,11 @@ const toView = (extension, registeredView, assetDir, platform) => {
2844
2905
  ...(css && {
2845
2906
  css
2846
2907
  }),
2847
- extensionId: getExtensionId(extension),
2848
- icon: registeredView.icon || manifestView?.icon || '',
2908
+ ...(registeredView.eventListeners && {
2909
+ eventListeners: registeredView.eventListeners
2910
+ }),
2911
+ extensionId: getExtensionId$1(extension),
2912
+ icon: getIcon(extension, manifestView, registeredView, assetDir, platform),
2849
2913
  id,
2850
2914
  iframe: getIframe(extension, manifestView, assetDir, platform),
2851
2915
  kind: registeredView.kind || manifestView?.kind || '',
@@ -2885,6 +2949,10 @@ const handleMessagePort = async (port, rpcId) => {
2885
2949
  }
2886
2950
  };
2887
2951
 
2952
+ const handleViewContextChange = async (uid, viewId, context) => {
2953
+ await invoke$3('ExtensionManagement.handleViewContextChange', uid, viewId, context);
2954
+ };
2955
+
2888
2956
  const getRpcRemote = async () => {
2889
2957
  const rpc = await create$4({
2890
2958
  commandMap: commandMapRef,
@@ -3039,6 +3107,7 @@ const commandMap = {
3039
3107
  'Extensions.getColorThemeNames': getColorThemeNames,
3040
3108
  'Extensions.getDynamicWebExtensions': getDynamicWebExtensions,
3041
3109
  'Extensions.getExtension': getExtension,
3110
+ 'Extensions.getKeyBindings': getKeyBindings,
3042
3111
  'Extensions.getLanguages': getLanguages,
3043
3112
  'Extensions.getPreference': getPreference,
3044
3113
  'Extensions.getRemoteUrlForWebView': getRemoteUrlForWebView,
@@ -3047,6 +3116,7 @@ const commandMap = {
3047
3116
  'Extensions.getStatusBarItems': getStatusBarItems,
3048
3117
  'Extensions.getViews': getViews,
3049
3118
  'Extensions.handleMessagePort': handleMessagePort,
3119
+ 'Extensions.handleViewContextChange': handleViewContextChange,
3050
3120
  'Extensions.importExtension': importExtension,
3051
3121
  'Extensions.initialize': initialize,
3052
3122
  'Extensions.install': installExtension,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.12.0",
3
+ "version": "4.14.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"