@lvce-editor/extension-management-worker 4.11.0 → 4.13.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
  }
@@ -2447,6 +2447,16 @@ const dispatchViewEvent = async (viewId, uid, event, assetDir, platform) => {
2447
2447
  }
2448
2448
  return rpc.invoke('ExtensionApi.dispatchViewEvent', uid, event);
2449
2449
  };
2450
+ const requestViewRerender = async uid => {
2451
+ await invoke$3('Viewlet.executeViewletCommand', uid, 'rerender');
2452
+ };
2453
+ const renderViewInstance = async (viewId, uid, assetDir, platform) => {
2454
+ const instance = get$1(uid);
2455
+ if (!instance || instance.status === 'error') {
2456
+ return undefined;
2457
+ }
2458
+ return instance.rpc.invoke('ExtensionApi.renderViewInstance', uid);
2459
+ };
2450
2460
  const disposeViewInstance = async (viewId, uid, assetDir, platform) => {
2451
2461
  const rpc = await getRpcForInstance(viewId, uid, assetDir, platform);
2452
2462
  if (!rpc) {
@@ -2707,6 +2717,48 @@ const getExtension = async (id, assetDir, platform) => {
2707
2717
  return undefined;
2708
2718
  };
2709
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
+
2710
2762
  const getPortTuple = () => {
2711
2763
  const {
2712
2764
  port1,
@@ -2811,6 +2863,25 @@ const getCss = (extension, manifestView, assetDir, platform) => {
2811
2863
  browser: css
2812
2864
  }, assetDir, platform);
2813
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
+ };
2814
2885
  const getIframe = (extension, manifestView, assetDir, platform) => {
2815
2886
  const iframe = manifestView?.iframe;
2816
2887
  if (!iframe || typeof iframe.path !== 'string' || iframe.path.length === 0) {
@@ -2834,8 +2905,11 @@ const toView = (extension, registeredView, assetDir, platform) => {
2834
2905
  ...(css && {
2835
2906
  css
2836
2907
  }),
2837
- extensionId: getExtensionId(extension),
2838
- 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),
2839
2913
  id,
2840
2914
  iframe: getIframe(extension, manifestView, assetDir, platform),
2841
2915
  kind: registeredView.kind || manifestView?.kind || '',
@@ -2875,6 +2949,10 @@ const handleMessagePort = async (port, rpcId) => {
2875
2949
  }
2876
2950
  };
2877
2951
 
2952
+ const handleViewContextChange = async (uid, viewId, context) => {
2953
+ await invoke$3('ExtensionManagement.handleViewContextChange', uid, viewId, context);
2954
+ };
2955
+
2878
2956
  const getRpcRemote = async () => {
2879
2957
  const rpc = await create$4({
2880
2958
  commandMap: commandMapRef,
@@ -3029,6 +3107,7 @@ const commandMap = {
3029
3107
  'Extensions.getColorThemeNames': getColorThemeNames,
3030
3108
  'Extensions.getDynamicWebExtensions': getDynamicWebExtensions,
3031
3109
  'Extensions.getExtension': getExtension,
3110
+ 'Extensions.getKeyBindings': getKeyBindings,
3032
3111
  'Extensions.getLanguages': getLanguages,
3033
3112
  'Extensions.getPreference': getPreference,
3034
3113
  'Extensions.getRemoteUrlForWebView': getRemoteUrlForWebView,
@@ -3037,10 +3116,13 @@ const commandMap = {
3037
3116
  'Extensions.getStatusBarItems': getStatusBarItems,
3038
3117
  'Extensions.getViews': getViews,
3039
3118
  'Extensions.handleMessagePort': handleMessagePort,
3119
+ 'Extensions.handleViewContextChange': handleViewContextChange,
3040
3120
  'Extensions.importExtension': importExtension,
3041
3121
  'Extensions.initialize': initialize,
3042
3122
  'Extensions.install': installExtension,
3043
3123
  'Extensions.invalidateExtensionsCache': invalidateExtensionsCache,
3124
+ 'Extensions.renderViewInstance': renderViewInstance,
3125
+ 'Extensions.requestViewRerender': requestViewRerender,
3044
3126
  'Extensions.saveViewInstanceState': saveViewInstanceState,
3045
3127
  'Extensions.sendMessagePortToFileSystemWorker': sendMessagePortToFileSystemWorker,
3046
3128
  'Extensions.setPreference': setPreference,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.11.0",
3
+ "version": "4.13.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"