@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,
|