@lvce-editor/extension-management-worker 4.30.2 → 4.30.4

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.
@@ -1597,6 +1597,7 @@ const invokeAndTransfer = (method, ...params) => {
1597
1597
  return invokeAndTransfer$1(method, ...params);
1598
1598
  };
1599
1599
 
1600
+ const pendingRpcs = Object.create(null);
1600
1601
  const createIsolatedExtensionHostWorker = async (extensionId, absolutePath, workerName, createRpc, invokeAndTransfer) => {
1601
1602
  return createRpc({
1602
1603
  commandMap: commandMapRef,
@@ -1606,14 +1607,30 @@ const createIsolatedExtensionHostWorker = async (extensionId, absolutePath, work
1606
1607
  }
1607
1608
  });
1608
1609
  };
1609
- const getOrCreateIsolatedExtensionHostWorker = async (extensionId, absolutePath, workerName = '') => {
1610
+ const createWorker = (extensionId, absolutePath, workerName) => {
1611
+ return createIsolatedExtensionHostWorker(extensionId, absolutePath, workerName, create$7, invokeAndTransfer);
1612
+ };
1613
+ const createAndStoreRpc = async (extensionId, absolutePath, workerName, create) => {
1614
+ const rpc = await create(extensionId, absolutePath, workerName);
1615
+ set$2(extensionId, rpc);
1616
+ return rpc;
1617
+ };
1618
+ const getOrCreateIsolatedExtensionHostWorker = async (extensionId, absolutePath, workerName = '', create = createWorker) => {
1610
1619
  const existingRpc = get$3(extensionId);
1611
1620
  if (existingRpc) {
1612
1621
  return existingRpc;
1613
1622
  }
1614
- const rpc = await createIsolatedExtensionHostWorker(extensionId, absolutePath, workerName, create$7, invokeAndTransfer);
1615
- set$2(extensionId, rpc);
1616
- return rpc;
1623
+ const pendingRpc = pendingRpcs[extensionId];
1624
+ if (pendingRpc !== undefined) {
1625
+ return pendingRpc;
1626
+ }
1627
+ const newRpc = createAndStoreRpc(extensionId, absolutePath, workerName, create);
1628
+ pendingRpcs[extensionId] = newRpc;
1629
+ try {
1630
+ return await newRpc;
1631
+ } finally {
1632
+ delete pendingRpcs[extensionId];
1633
+ }
1617
1634
  };
1618
1635
 
1619
1636
  const activateIsolatedExtension = async (extensionId, absolutePath, workerName, activationEvent, getOrCreate = getOrCreateIsolatedExtensionHostWorker) => {
@@ -3244,12 +3261,6 @@ const getStatusBarItems = async () => {
3244
3261
  return results.flat();
3245
3262
  };
3246
3263
 
3247
- const contributesViews = extension => {
3248
- return Array.isArray(extension.views) && extension.views.length > 0;
3249
- };
3250
- const getManifestView = (extension, id) => {
3251
- return extension.views?.find(view => view.id === id);
3252
- };
3253
3264
  const getCss = (extension, manifestView, assetDir, platform) => {
3254
3265
  const css = manifestView?.css;
3255
3266
  if (typeof css !== 'string' || css.length === 0) {
@@ -3260,13 +3271,16 @@ const getCss = (extension, manifestView, assetDir, platform) => {
3260
3271
  browser: css
3261
3272
  }, assetDir, platform);
3262
3273
  };
3274
+
3263
3275
  const isAbsoluteIcon = icon => {
3264
3276
  return icon.startsWith('http://') || icon.startsWith('https://') || icon.startsWith('file://') || icon.startsWith('/');
3265
3277
  };
3278
+
3266
3279
  const isRelativeIconPath = icon => {
3267
3280
  return icon.startsWith('./') || icon.startsWith('../') || icon.includes('/') || /\.(?:bmp|gif|ico|jpe?g|png|svg|webp)$/i.test(icon);
3268
3281
  };
3269
- const getIcon = (extension, manifestView, registeredView, assetDir, platform) => {
3282
+
3283
+ const getIcon = (extension, manifestView, assetDir, platform) => {
3270
3284
  const manifestIcon = manifestView?.icon;
3271
3285
  if (typeof manifestIcon === 'string' && manifestIcon.length > 0) {
3272
3286
  if (isAbsoluteIcon(manifestIcon) || !isRelativeIconPath(manifestIcon)) {
@@ -3277,8 +3291,9 @@ const getIcon = (extension, manifestView, registeredView, assetDir, platform) =>
3277
3291
  browser: manifestIcon
3278
3292
  }, assetDir, platform);
3279
3293
  }
3280
- return registeredView.icon || '';
3294
+ return '';
3281
3295
  };
3296
+
3282
3297
  const getIframe = (extension, manifestView, assetDir, platform) => {
3283
3298
  const iframe = manifestView?.iframe;
3284
3299
  if (!iframe || typeof iframe.path !== 'string' || iframe.path.length === 0) {
@@ -3294,9 +3309,9 @@ const getIframe = (extension, manifestView, assetDir, platform) => {
3294
3309
  }, assetDir, platform)
3295
3310
  };
3296
3311
  };
3297
- const toView = (extension, registeredView, assetDir, platform) => {
3298
- const id = registeredView.id || '';
3299
- const manifestView = getManifestView(extension, id);
3312
+
3313
+ const toView = (extension, manifestView, assetDir, platform) => {
3314
+ const id = manifestView.id || '';
3300
3315
  const css = getCss(extension, manifestView, assetDir, platform);
3301
3316
  const selector = Array.isArray(manifestView?.selector) ? manifestView.selector.filter(item => typeof item === 'string') : undefined;
3302
3317
  const type = typeof manifestView?.type === 'string' ? manifestView.type : undefined;
@@ -3304,8 +3319,8 @@ const toView = (extension, registeredView, assetDir, platform) => {
3304
3319
  ...(css && {
3305
3320
  css
3306
3321
  }),
3307
- ...(registeredView.eventListeners && {
3308
- eventListeners: registeredView.eventListeners
3322
+ ...(Array.isArray(manifestView.eventListeners) && {
3323
+ eventListeners: manifestView.eventListeners
3309
3324
  }),
3310
3325
  ...(selector && {
3311
3326
  selector
@@ -3314,37 +3329,49 @@ const toView = (extension, registeredView, assetDir, platform) => {
3314
3329
  type
3315
3330
  }),
3316
3331
  extensionId: getExtensionId$1(extension),
3317
- icon: getIcon(extension, manifestView, registeredView, assetDir, platform),
3332
+ icon: getIcon(extension, manifestView, assetDir, platform),
3318
3333
  id,
3319
3334
  iframe: getIframe(extension, manifestView, assetDir, platform),
3320
- kind: registeredView.kind || manifestView?.kind || '',
3321
- showSideBarHeader: manifestView?.showSideBarHeader !== false,
3322
- title: registeredView.title || manifestView?.title || id
3335
+ kind: manifestView.kind || '',
3336
+ showSideBarHeader: manifestView.showSideBarHeader !== false,
3337
+ title: manifestView.title || id
3323
3338
  };
3324
3339
  };
3325
- const getRpcViewRegistrySnapshot = async rpc => {
3326
- return rpc.invoke('ExtensionApi.getViewRegistrySnapshot');
3327
- };
3328
- const getExtensionViews = async (extension, assetDir, platform) => {
3329
- const rpc = await getRpc$1(extension, assetDir, platform);
3330
- const snapshot = await getRpcViewRegistrySnapshot(rpc);
3331
- if (!Array.isArray(snapshot.views)) {
3340
+
3341
+ const getExtensionViews = (extension, assetDir, platform) => {
3342
+ if (!Array.isArray(extension.views)) {
3332
3343
  return [];
3333
3344
  }
3334
- return snapshot.views.filter(view => view && typeof view.id === 'string').map(view => toView(extension, view, assetDir, platform));
3345
+ return extension.views.filter(view => view && typeof view.id === 'string').map(view => toView(extension, view, assetDir, platform));
3335
3346
  };
3336
- const getViewsFromExtensionWorkers = async (extensions, assetDir, platform) => {
3337
- const matchingExtensions = extensions.filter(extension => isExtensionIsolated(extension) && contributesViews(extension));
3338
- const results = await Promise.all(matchingExtensions.map(extension => getExtensionViews(extension, assetDir, platform)));
3339
- return results.flat();
3347
+
3348
+ const contributesViews = extension => {
3349
+ return Array.isArray(extension.views) && extension.views.length > 0;
3340
3350
  };
3351
+
3352
+ const shouldLoadViews = extension => {
3353
+ if (!contributesViews(extension)) {
3354
+ return false;
3355
+ }
3356
+ if (!isExtensionIsolated(extension)) {
3357
+ warn(`Extension "${getExtensionId$1(extension)}" contributes activity bar views but is not isolated. The views will not be shown. Add "isolated": true to extension.json to enable them.`);
3358
+ return false;
3359
+ }
3360
+ return true;
3361
+ };
3362
+
3363
+ const getViewsFromExtensions = (extensions, assetDir, platform) => {
3364
+ const matchingExtensions = extensions.filter(shouldLoadViews);
3365
+ return matchingExtensions.flatMap(extension => getExtensionViews(extension, assetDir, platform));
3366
+ };
3367
+
3341
3368
  const getViews = async (assetDir, platform) => {
3342
3369
  const {
3343
3370
  assetDir: resolvedAssetDir,
3344
3371
  platform: resolvedPlatform
3345
3372
  } = await getRuntimeContext(assetDir, platform);
3346
3373
  const extensions = await getAllExtensions(resolvedAssetDir, resolvedPlatform);
3347
- return getViewsFromExtensionWorkers(extensions, resolvedAssetDir, resolvedPlatform);
3374
+ return getViewsFromExtensions(extensions, resolvedAssetDir, resolvedPlatform);
3348
3375
  };
3349
3376
 
3350
3377
  const handleData = () => {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "4.30.2",
3
+ "version": "4.30.4",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"