@lvce-editor/extension-management-worker 4.49.0 → 4.51.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.
@@ -3027,6 +3027,102 @@ const readFile = uri => {
3027
3027
  return readFile$1(uri);
3028
3028
  };
3029
3029
 
3030
+ /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
3031
+
3032
+ const protocol = 'extension-output://';
3033
+ const hasOutputChannels = extension => {
3034
+ return !extension.disabled && isExtensionIsolated(extension) && Array.isArray(extension.outputChannels) && extension.outputChannels.length > 0;
3035
+ };
3036
+ const getOutputChannelUri = (extensionId, outputChannelId) => {
3037
+ return `${protocol}${encodeURIComponent(extensionId)}/${encodeURIComponent(outputChannelId)}`;
3038
+ };
3039
+ const getRegisteredOutputChannelIds = snapshot => {
3040
+ if (!snapshot || !Array.isArray(snapshot.outputChannels)) {
3041
+ return new Set();
3042
+ }
3043
+ return new Set(snapshot.outputChannels.map(outputChannel => outputChannel.id).filter(id => typeof id === 'string'));
3044
+ };
3045
+ const getExtensionOutputChannelProviders = async (extension, assetDir, platform) => {
3046
+ const extensionId = getExtensionId$1(extension);
3047
+ const rpc = await getRpc$1(extension, assetDir, platform);
3048
+ const snapshot = await rpc.invoke('ExtensionApi.getOutputChannelRegistrySnapshot');
3049
+ const registeredIds = getRegisteredOutputChannelIds(snapshot);
3050
+ const outputChannels = extension.outputChannels || [];
3051
+ return outputChannels.filter(outputChannel => typeof outputChannel.id === 'string' && typeof outputChannel.label === 'string' && registeredIds.has(outputChannel.id)).map(outputChannel => ({
3052
+ id: outputChannel.id,
3053
+ label: outputChannel.label,
3054
+ uri: getOutputChannelUri(extensionId, outputChannel.id)
3055
+ }));
3056
+ };
3057
+ const getOutputChannelProviders = async extensionsState => {
3058
+ const {
3059
+ assetDir,
3060
+ platform
3061
+ } = await getRuntimeContext('', extensionsState.platform);
3062
+ const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
3063
+ const outputExtensions = extensions.filter(hasOutputChannels);
3064
+ const providers = await Promise.all(outputExtensions.map(extension => getExtensionOutputChannelProviders(extension, assetDir, platform)));
3065
+ return providers.flat();
3066
+ };
3067
+ const parseOutputChannelUri = uri => {
3068
+ if (!uri.startsWith(protocol)) {
3069
+ throw new Error(`Invalid extension output uri ${uri}`);
3070
+ }
3071
+ const value = uri.slice(protocol.length);
3072
+ const separatorIndex = value.indexOf('/');
3073
+ if (separatorIndex === -1) {
3074
+ throw new Error(`Invalid extension output uri ${uri}`);
3075
+ }
3076
+ const extensionId = decodeURIComponent(value.slice(0, separatorIndex));
3077
+ const outputChannelId = decodeURIComponent(value.slice(separatorIndex + 1));
3078
+ if (!extensionId || !outputChannelId) {
3079
+ throw new Error(`Invalid extension output uri ${uri}`);
3080
+ }
3081
+ return [extensionId, outputChannelId];
3082
+ };
3083
+ const resolveOutputChannel = async (extensionsState, uri) => {
3084
+ const [extensionId, outputChannelId] = parseOutputChannelUri(uri);
3085
+ const {
3086
+ assetDir,
3087
+ platform
3088
+ } = await getRuntimeContext('', extensionsState.platform);
3089
+ const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
3090
+ const extension = extensions.find(candidate => getExtensionId$1(candidate) === extensionId && hasOutputChannels(candidate));
3091
+ const isContributed = extension?.outputChannels?.some(outputChannel => outputChannel.id === outputChannelId);
3092
+ if (!extension || !isContributed) {
3093
+ throw new Error(`Output channel ${outputChannelId} is not contributed by extension ${extensionId}`);
3094
+ }
3095
+ const rpc = await getRpc$1(extension, assetDir, platform);
3096
+ return {
3097
+ extensionId,
3098
+ outputChannelId,
3099
+ rpc
3100
+ };
3101
+ };
3102
+ const clearOutputChannel = async (extensionsState, uri) => {
3103
+ const {
3104
+ extensionId,
3105
+ outputChannelId,
3106
+ rpc
3107
+ } = await resolveOutputChannel(extensionsState, uri);
3108
+ const didClear = await rpc.invoke('ExtensionApi.clearOutputChannel', outputChannelId);
3109
+ if (didClear !== true) {
3110
+ throw new TypeError(`Output channel ${outputChannelId} is not registered by extension ${extensionId}`);
3111
+ }
3112
+ };
3113
+ const readOutputChannel = async (extensionsState, uri) => {
3114
+ const {
3115
+ extensionId,
3116
+ outputChannelId,
3117
+ rpc
3118
+ } = await resolveOutputChannel(extensionsState, uri);
3119
+ const logs = await rpc.invoke('ExtensionApi.getOutputChannelLogs', outputChannelId);
3120
+ if (typeof logs !== 'string') {
3121
+ throw new TypeError(`Output channel ${outputChannelId} is not registered by extension ${extensionId}`);
3122
+ }
3123
+ return logs;
3124
+ };
3125
+
3030
3126
  const instances = Object.create(null);
3031
3127
  const set$1 = (uid, instance) => {
3032
3128
  instances[uid] = instance;
@@ -3938,6 +4034,7 @@ const commandMap = {
3938
4034
  'Extensions.activateByEvent': activateByEvent,
3939
4035
  'Extensions.addExtension': addExtension,
3940
4036
  'Extensions.addWebExtension': addWebExtension,
4037
+ 'Extensions.clearOutputChannel': wrapCommand(clearOutputChannel),
3941
4038
  'Extensions.createViewInstance': createViewInstance,
3942
4039
  'Extensions.createWebViewWorkerRpc': createWebViewWorkerRpc,
3943
4040
  'Extensions.createWebViewWorkerRpc2': createWebViewWorkerRpc2,
@@ -3976,6 +4073,7 @@ const commandMap = {
3976
4073
  'Extensions.getExtension': getExtension,
3977
4074
  'Extensions.getKeyBindings': getKeyBindings,
3978
4075
  'Extensions.getLanguages': getLanguages,
4076
+ 'Extensions.getOutputChannelProviders': wrapCommand(getOutputChannelProviders),
3979
4077
  'Extensions.getPreference': getPreference,
3980
4078
  'Extensions.getRemoteUrlForWebView': getRemoteUrlForWebView,
3981
4079
  'Extensions.getRpcInfo': getRpcInfo,
@@ -3994,6 +4092,7 @@ const commandMap = {
3994
4092
  'Extensions.initialize': initialize,
3995
4093
  'Extensions.install': installExtension,
3996
4094
  'Extensions.invalidateExtensionsCache': invalidateExtensionsCache,
4095
+ 'Extensions.readOutputChannel': wrapCommand(readOutputChannel),
3997
4096
  'Extensions.renderViewInstance': renderViewInstance,
3998
4097
  'Extensions.requestViewRerender': requestViewRerender,
3999
4098
  'Extensions.saveViewInstanceState': saveViewInstanceState,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.49.0",
3
+ "version": "4.51.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"