@lvce-editor/extension-management-worker 4.88.3 → 4.88.5

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.
@@ -127,11 +127,21 @@ const removeWebExtension = (id, applicationId) => {
127
127
  }, applicationId);
128
128
  return true;
129
129
  };
130
- const clearCachedExtensions = applicationId => {
130
+ const clearCachedExtensions = (applicationId, expected) => {
131
+ const current = get$7(applicationId);
132
+ if (expected !== undefined && current.cachedExtensions?.extensions !== expected) {
133
+ return;
134
+ }
131
135
  update({
132
136
  cachedExtensions: undefined
133
137
  }, applicationId);
134
138
  };
139
+ const clearAllCachedExtensions = () => {
140
+ clearCachedExtensions();
141
+ for (const applicationId of applications$2.keys()) {
142
+ clearCachedExtensions(applicationId);
143
+ }
144
+ };
135
145
  const getOrCreateWebExtensionsCache = extensionsState => {
136
146
  const existing = webExtensionsCaches.get(extensionsState);
137
147
  if (existing) {
@@ -2166,6 +2176,32 @@ const getExtensionsWithState = async (extensions, extensionsState, platform) =>
2166
2176
  } = await getWorkspaceExtensionEnablementSafe();
2167
2177
  return withDisabledState(extensionsWithDisabledState, workspaceDisabledIds, workspaceEnabledIds);
2168
2178
  };
2179
+ const getSharedProcessExtensions = (extensionsState, fields) => {
2180
+ const current = get$7(extensionsState.applicationId);
2181
+ const requestedFields = fields === undefined ? undefined : [...new Set([...fields, 'id', 'disabled'])];
2182
+ const cached = current.cachedExtensions;
2183
+ if (cached) {
2184
+ const cachedFields = cached.fields;
2185
+ if (cachedFields === undefined || requestedFields !== undefined && requestedFields.every(field => cachedFields.includes(field))) {
2186
+ return cached.extensions;
2187
+ }
2188
+ }
2189
+ const extensions = Promise.try(() => requestedFields === undefined ? invoke$3('ExtensionManagement.getAllExtensions') : invoke$3('ExtensionManagement.getAllExtensions', requestedFields));
2190
+ update({
2191
+ cachedExtensions: {
2192
+ extensions,
2193
+ fields: requestedFields
2194
+ }
2195
+ }, extensionsState.applicationId);
2196
+ void extensions.catch(() => {
2197
+ try {
2198
+ clearCachedExtensions(extensionsState.applicationId, extensions);
2199
+ } catch {
2200
+ // The application may have been disposed while discovery was pending.
2201
+ }
2202
+ });
2203
+ return extensions;
2204
+ };
2169
2205
  const getAllExtensionsWithState = async (extensionsState, assetDir, platform, fields) => {
2170
2206
  const {
2171
2207
  assetDir: resolvedAssetDir,
@@ -2187,7 +2223,7 @@ const getAllExtensionsWithState = async (extensionsState, assetDir, platform, fi
2187
2223
  const compatibleExtensions = [...webExtensions, ...meta].filter(extension => isExtensionCompatible(extension, resolvedPlatform));
2188
2224
  extensions = await getExtensionsWithState(compatibleExtensions, extensionsState, resolvedPlatform);
2189
2225
  } else {
2190
- const local = await invoke$3('ExtensionManagement.getAllExtensions');
2226
+ const local = await getSharedProcessExtensions(extensionsState, fields);
2191
2227
  extensions = await getExtensionsWithState([...local, ...meta], extensionsState, resolvedPlatform);
2192
2228
  }
2193
2229
  if (fields === undefined) {
@@ -3414,6 +3450,7 @@ const activateByEvent = async (event, assetDir, platform, application) => {
3414
3450
  };
3415
3451
 
3416
3452
  const invalidateExtensionsCache = async (extensionId, disabled) => {
3453
+ clearAllCachedExtensions();
3417
3454
  try {
3418
3455
  if (extensionId) {
3419
3456
  await invoke$4('ExtensionManagement.handleExtensionsCacheInvalidated', extensionId, disabled);
@@ -3916,6 +3953,9 @@ const executeLanguageServerCompletion = async (rpc, extension, textDocument, off
3916
3953
  return result.map(sanitizeCompletionItem).filter(item => item !== undefined);
3917
3954
  };
3918
3955
 
3956
+ // Preserve provider activation, RPC permissions, application identity and language-server metadata.
3957
+ const languageProviderManifestFields = ['applicationGeneration', 'applicationId', 'browser', 'builtin', 'completionProviders', 'contentSecurityPolicy', 'diagnosticProviders', 'disabled', 'id', 'isolated', 'isWeb', 'languageServers', 'path', 'rpc', 'uri', 'workerName'];
3958
+
3919
3959
  /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
3920
3960
 
3921
3961
  const contributesCompletionProvider = (extension, languageId) => {
@@ -3925,7 +3965,7 @@ const contributesLanguageServer$3 = (extension, languageId) => {
3925
3965
  return Array.isArray(extension.languageServers) && extension.languageServers.some(languageServer => languageServer.languageId === languageId);
3926
3966
  };
3927
3967
  const getMatchingExtensions$6 = async (extensionsState, textDocument, assetDir, platform) => {
3928
- const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
3968
+ const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform, languageProviderManifestFields);
3929
3969
  return extensions.filter(extension => !extension.disabled && isExtensionIsolated(extension) && (contributesCompletionProvider(extension, textDocument.languageId) || contributesLanguageServer$3(extension, textDocument.languageId)));
3930
3970
  };
3931
3971
  const executeRpcCompletionProvider = async (rpc, textDocument, args) => {
@@ -4015,7 +4055,7 @@ const contributesLanguageServer$2 = (extension, languageId) => {
4015
4055
  return Array.isArray(extension.languageServers) && extension.languageServers.some(languageServer => languageServer.languageId === languageId);
4016
4056
  };
4017
4057
  const getMatchingExtensions$5 = async (extensionsState, textDocument, assetDir, platform) => {
4018
- const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform);
4058
+ const extensions = await getAllExtensionsWithState(extensionsState, assetDir, platform, languageProviderManifestFields);
4019
4059
  return extensions.filter(extension => !extension.disabled && isExtensionIsolated(extension) && (contributesDiagnosticProvider(extension, textDocument.languageId) || contributesLanguageServer$2(extension, textDocument.languageId)));
4020
4060
  };
4021
4061
  const executeRpcDiagnosticProvider = async (rpc, textDocument, args) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.88.3",
3
+ "version": "4.88.5",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"