@lvce-editor/extension-management-worker 3.2.0 → 3.4.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.
@@ -1,3 +1,7 @@
1
+ const activateByEvent = async () => {
2
+ // TODO
3
+ };
4
+
1
5
  class AssertionError extends Error {
2
6
  constructor(message) {
3
7
  super(message);
@@ -604,7 +608,7 @@ const execute = (command, ...args) => {
604
608
 
605
609
  const Two$1 = '2.0';
606
610
  const callbacks = Object.create(null);
607
- const get$6 = id => {
611
+ const get$4 = id => {
608
612
  return callbacks[id];
609
613
  };
610
614
  const remove$1 = id => {
@@ -753,7 +757,7 @@ const warn$1 = (...args) => {
753
757
  console.warn(...args);
754
758
  };
755
759
  const resolve = (id, response) => {
756
- const fn = get$6(id);
760
+ const fn = get$4(id);
757
761
  if (!fn) {
758
762
  console.log(response);
759
763
  warn$1(`callback ${id} may already be disposed`);
@@ -937,9 +941,9 @@ const create$a = (id, method, params) => {
937
941
  return message;
938
942
  };
939
943
 
940
- let id$1 = 0;
944
+ let id = 0;
941
945
  const create$9 = () => {
942
- return ++id$1;
946
+ return ++id;
943
947
  };
944
948
 
945
949
  const registerPromise = map => {
@@ -1212,10 +1216,10 @@ const createMockRpc = ({
1212
1216
  };
1213
1217
 
1214
1218
  const rpcs$1 = Object.create(null);
1215
- const set$7 = (id, rpc) => {
1219
+ const set$6 = (id, rpc) => {
1216
1220
  rpcs$1[id] = rpc;
1217
1221
  };
1218
- const get$5 = id => {
1222
+ const get$3 = id => {
1219
1223
  return rpcs$1[id];
1220
1224
  };
1221
1225
  const remove = id => {
@@ -1226,18 +1230,18 @@ const remove = id => {
1226
1230
  const create$1 = rpcId => {
1227
1231
  return {
1228
1232
  async dispose() {
1229
- const rpc = get$5(rpcId);
1233
+ const rpc = get$3(rpcId);
1230
1234
  await rpc.dispose();
1231
1235
  },
1232
1236
  // @ts-ignore
1233
1237
  invoke(method, ...params) {
1234
- const rpc = get$5(rpcId);
1238
+ const rpc = get$3(rpcId);
1235
1239
  // @ts-ignore
1236
1240
  return rpc.invoke(method, ...params);
1237
1241
  },
1238
1242
  // @ts-ignore
1239
1243
  invokeAndTransfer(method, ...params) {
1240
- const rpc = get$5(rpcId);
1244
+ const rpc = get$3(rpcId);
1241
1245
  // @ts-ignore
1242
1246
  return rpc.invokeAndTransfer(method, ...params);
1243
1247
  },
@@ -1245,7 +1249,7 @@ const create$1 = rpcId => {
1245
1249
  const mockRpc = createMockRpc({
1246
1250
  commandMap
1247
1251
  });
1248
- set$7(rpcId, mockRpc);
1252
+ set$6(rpcId, mockRpc);
1249
1253
  // @ts-ignore
1250
1254
  mockRpc[Symbol.dispose] = () => {
1251
1255
  remove(rpcId);
@@ -1254,7 +1258,7 @@ const create$1 = rpcId => {
1254
1258
  return mockRpc;
1255
1259
  },
1256
1260
  set(rpc) {
1257
- set$7(rpcId, rpc);
1261
+ set$6(rpcId, rpc);
1258
1262
  }
1259
1263
  };
1260
1264
  };
@@ -1271,12 +1275,12 @@ const SharedProcess = 1492;
1271
1275
 
1272
1276
  const {
1273
1277
  invoke: invoke$4,
1274
- set: set$6
1278
+ set: set$5
1275
1279
  } = create$1(ExtensionHostWorker);
1276
1280
 
1277
1281
  const {
1278
1282
  invoke: invoke$3,
1279
- set: set$5
1283
+ set: set$4
1280
1284
  } = create$1(FileSystemWorker);
1281
1285
  const readFile = async uri => {
1282
1286
  return invoke$3('FileSystem.readFile', uri);
@@ -1291,8 +1295,12 @@ const exists = async uri => {
1291
1295
  const {
1292
1296
  invoke: invoke$2,
1293
1297
  invokeAndTransfer: invokeAndTransfer$1,
1294
- set: set$4
1298
+ set: set$3
1295
1299
  } = create$1(RendererWorker);
1300
+ const sendMessagePortToIconThemeWorker = async (port, rpcId) => {
1301
+ const command = 'IconTheme.handleMessagePort';
1302
+ await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToIconThemeWorker', port, command, rpcId);
1303
+ };
1296
1304
  const sendMessagePortToFileSystemWorker = async (port, rpcId) => {
1297
1305
  const command = 'FileSystem.handleMessagePort';
1298
1306
  await invokeAndTransfer$1('SendMessagePortToExtensionHostWorker.sendMessagePortToFileSystemWorker', port, command, rpcId);
@@ -1308,7 +1316,7 @@ const sendMessagePortToSharedProcess = async port => {
1308
1316
 
1309
1317
  const {
1310
1318
  invoke: invoke$1,
1311
- set: set$3
1319
+ set: set$2
1312
1320
  } = create$1(SharedProcess);
1313
1321
 
1314
1322
  const create = () => {
@@ -1323,6 +1331,91 @@ const isCanceled = token => {
1323
1331
  return token.finished;
1324
1332
  };
1325
1333
 
1334
+ const None = 0;
1335
+ const Importing = 1;
1336
+ const Activating = 2;
1337
+ const Activated = 3;
1338
+ const Error$1 = 4;
1339
+
1340
+ /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
1341
+
1342
+ const createInitialState = () => {
1343
+ return {
1344
+ activatedExtensions: Object.create(null),
1345
+ cachedActivationEvents: Object.create(null),
1346
+ cachedExtensions: undefined,
1347
+ disabledIds: [],
1348
+ platform: 0,
1349
+ runtimeStatuses: Object.create(null),
1350
+ webExtensions: []
1351
+ };
1352
+ };
1353
+ const createEmptyRuntimeStatus = id => {
1354
+ return {
1355
+ activationEndTime: 0,
1356
+ activationEvent: '',
1357
+ activationStartTime: 0,
1358
+ activationTime: 0,
1359
+ id,
1360
+ importEndTime: 0,
1361
+ importStartTime: 0,
1362
+ importTime: 0,
1363
+ status: None
1364
+ };
1365
+ };
1366
+ let extensionsState = createInitialState();
1367
+ const get$2 = () => {
1368
+ return extensionsState;
1369
+ };
1370
+ const set$1 = newState => {
1371
+ extensionsState = newState;
1372
+ };
1373
+ const update = newState => {
1374
+ set$1({
1375
+ ...extensionsState,
1376
+ ...newState
1377
+ });
1378
+ };
1379
+ const setPlatform = platform => {
1380
+ update({
1381
+ platform
1382
+ });
1383
+ };
1384
+ const hasWebExtensionUri = uri => {
1385
+ return extensionsState.webExtensions.some(extension => extension.uri === uri);
1386
+ };
1387
+ const addWebExtension$1 = extension => {
1388
+ update({
1389
+ webExtensions: [...extensionsState.webExtensions, extension]
1390
+ });
1391
+ };
1392
+ const clearCachedExtensions = () => {
1393
+ update({
1394
+ cachedExtensions: undefined
1395
+ });
1396
+ };
1397
+ const setRuntimeStatus = status => {
1398
+ update({
1399
+ runtimeStatuses: {
1400
+ ...extensionsState.runtimeStatuses,
1401
+ [status.id]: {
1402
+ ...status
1403
+ }
1404
+ }
1405
+ });
1406
+ };
1407
+ const updateRuntimeStatus = (id, statusUpdate) => {
1408
+ const previousStatus = extensionsState.runtimeStatuses[id] || createEmptyRuntimeStatus(id);
1409
+ setRuntimeStatus({
1410
+ ...previousStatus,
1411
+ ...statusUpdate,
1412
+ id
1413
+ });
1414
+ };
1415
+ const getRuntimeStatus$1 = extensionId => {
1416
+ return extensionsState.runtimeStatuses[extensionId];
1417
+ };
1418
+
1326
1419
  const baseName = path => {
1327
1420
  const slashIndex = path.lastIndexOf('/');
1328
1421
  return path.slice(slashIndex + 1);
@@ -1353,26 +1446,6 @@ const isImportError = error => {
1353
1446
  return isImportErrorChrome(error) || isImportErrorFirefox(error) || isSyntaxError(error);
1354
1447
  };
1355
1448
 
1356
- const states = Object.create(null);
1357
- const set$2 = status => {
1358
- states[status.id] = status;
1359
- };
1360
- const get$4 = extensionId => {
1361
- return states[extensionId];
1362
- };
1363
- const update$1 = (id, update) => {
1364
- states[id] = {
1365
- ...states[id],
1366
- ...update
1367
- };
1368
- };
1369
-
1370
- const None = 0;
1371
- const Importing = 1;
1372
- const Activating = 2;
1373
- const Activated = 3;
1374
- const Error$1 = 4;
1375
-
1376
1449
  const sleep = duration => {
1377
1450
  const {
1378
1451
  promise,
@@ -1422,14 +1495,14 @@ const activateExtension2 = async (extensionId, extension, absolutePath) => {
1422
1495
  const token = create();
1423
1496
  try {
1424
1497
  const startTime = performance.now();
1425
- update$1(extensionId, {
1498
+ updateRuntimeStatus(extensionId, {
1426
1499
  activationStartTime: startTime,
1427
1500
  status: Activating
1428
1501
  });
1429
1502
  await Promise.race([activate(extensionId, extension), rejectAfterTimeout(activationTimeout, token)]);
1430
1503
  const endTime = performance.now();
1431
1504
  const time = endTime - startTime;
1432
- update$1(extensionId, {
1505
+ updateRuntimeStatus(extensionId, {
1433
1506
  activationEndTime: endTime,
1434
1507
  activationTime: time,
1435
1508
  status: Activated
@@ -1442,7 +1515,7 @@ const activateExtension2 = async (extensionId, extension, absolutePath) => {
1442
1515
  cause: error
1443
1516
  });
1444
1517
  }
1445
- update$1(extensionId, {
1518
+ updateRuntimeStatus(extensionId, {
1446
1519
  status: Error$1 // TODO maybe store error also in runtime status state
1447
1520
  });
1448
1521
  throw new VError(error, `Failed to activate extension ${id}`);
@@ -1455,7 +1528,7 @@ const rpcs = Object.create(null);
1455
1528
  const add = (id, rpc) => {
1456
1529
  rpcs[id] = rpc;
1457
1530
  };
1458
- const get$3 = id => {
1531
+ const get$1 = id => {
1459
1532
  return rpcs[id];
1460
1533
  };
1461
1534
 
@@ -1498,7 +1571,7 @@ const importExtension = async (extensionId, absolutePath, activationEvent) => {
1498
1571
  try {
1499
1572
  string(absolutePath);
1500
1573
  const startTime = performance.now();
1501
- set$2({
1574
+ setRuntimeStatus({
1502
1575
  activationEndTime: 0,
1503
1576
  activationEvent: activationEvent,
1504
1577
  activationStartTime: performance.now(),
@@ -1513,12 +1586,12 @@ const importExtension = async (extensionId, absolutePath, activationEvent) => {
1513
1586
  await invoke$4('ExtensionHost.importExtension2', extensionId, absolutePath);
1514
1587
  const endTime = performance.now();
1515
1588
  const time = endTime - startTime;
1516
- update$1(extensionId, {
1589
+ updateRuntimeStatus(extensionId, {
1517
1590
  importEndTime: endTime,
1518
1591
  importTime: time
1519
1592
  });
1520
1593
  } catch (error) {
1521
- update$1(extensionId, {
1594
+ updateRuntimeStatus(extensionId, {
1522
1595
  status: Error$1 // TODO maybe store error also in runtime status state
1523
1596
  });
1524
1597
  if (isImportError(error)) {
@@ -1549,22 +1622,6 @@ const activateExtension3 = async (extension, absolutePath, activationEvent, plat
1549
1622
  await activateExtension2(extensionId, extension, absolutePath);
1550
1623
  };
1551
1624
 
1552
- const state$1 = {
1553
- webExtensions: []
1554
- };
1555
- const push = extension => {
1556
- state$1.webExtensions.push(extension);
1557
- };
1558
- const get$2 = () => {
1559
- return state$1.webExtensions;
1560
- };
1561
-
1562
- const cache = Object.create(null);
1563
- const id = 1;
1564
- const clear = () => {
1565
- delete cache[id];
1566
- };
1567
-
1568
1625
  const getJson$1 = async url => {
1569
1626
  try {
1570
1627
  const response = await fetch(url);
@@ -1598,11 +1655,13 @@ const getWebManifestPath = path => {
1598
1655
  };
1599
1656
 
1600
1657
  const addWebExtension = async path => {
1658
+ if (hasWebExtensionUri(path)) {
1659
+ return undefined;
1660
+ }
1601
1661
  const manifestPath = getWebManifestPath(path);
1602
1662
  const manifest = await getWebExtensionManifest(path, manifestPath);
1603
- // TODO avoid mutation if possible
1604
- push(manifest);
1605
- clear();
1663
+ addWebExtension$1(manifest);
1664
+ clearCachedExtensions();
1606
1665
  return manifest;
1607
1666
  };
1608
1667
 
@@ -1702,32 +1761,10 @@ const setJson = async (cacheKey, data) => {
1702
1761
 
1703
1762
  const disabledExtensionsCacheKey = '/cache/disabledExtensions.json';
1704
1763
 
1705
- /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
1706
-
1707
- let state = {
1708
- activatedExtensions: Object.create(null),
1709
- cachedActivationEvents: Object.create(null),
1710
- disabledIds: [],
1711
- platform: 0
1712
- };
1713
- const set$1 = newState => {
1714
- state = newState;
1715
- };
1716
- const update = newState => {
1717
- const fullNewState = {
1718
- ...state,
1719
- ...newState
1720
- };
1721
- state = fullNewState;
1722
- };
1723
- const get$1 = () => {
1724
- return state;
1725
- };
1726
-
1727
1764
  const disableExtension2$1 = async (id, platform) => {
1728
1765
  const isTest = platform === Test;
1729
1766
  const isWeb = platform === Web;
1730
- const oldState = get$1(); // TODO maybe pass in an application id? Would allow multiple editors with different extensions.
1767
+ const oldState = get$2(); // TODO maybe pass in an application id? Would allow multiple editors with different extensions.
1731
1768
  if (isTest) {
1732
1769
  const newState = {
1733
1770
  ...oldState,
@@ -1749,7 +1786,7 @@ const disableExtension2$1 = async (id, platform) => {
1749
1786
  const enableExtension2$1 = async (id, platform) => {
1750
1787
  const isTest = platform === Test;
1751
1788
  const isWeb = platform === Web;
1752
- const oldState = get$1();
1789
+ const oldState = get$2();
1753
1790
  if (isTest) {
1754
1791
  const newState = {
1755
1792
  ...oldState,
@@ -1784,7 +1821,7 @@ const disableExtension2 = async (id, platform) => {
1784
1821
  };
1785
1822
 
1786
1823
  const disableExtension = async (id, isTest) => {
1787
- const oldState = get$1();
1824
+ const oldState = get$2();
1788
1825
  return disableExtension2(id, oldState.platform);
1789
1826
  };
1790
1827
 
@@ -1811,7 +1848,7 @@ const enableExtension2 = async (id, platform) => {
1811
1848
  };
1812
1849
 
1813
1850
  const enableExtension = async (id, isTest) => {
1814
- const oldState = get$1();
1851
+ const oldState = get$2();
1815
1852
  return enableExtension2(id, oldState.platform);
1816
1853
  };
1817
1854
 
@@ -1980,7 +2017,7 @@ const getColorThemeUri = (extensions, colorThemeId) => {
1980
2017
  };
1981
2018
 
1982
2019
  const getDynamicWebExtensions = () => {
1983
- return get$2();
2020
+ return get$2().webExtensions;
1984
2021
  };
1985
2022
 
1986
2023
  const getWebExtensionsUrl = assetDir => {
@@ -2142,7 +2179,7 @@ const getRemoteUrlForWebView = async (uri, options = {}) => {
2142
2179
  };
2143
2180
 
2144
2181
  const getRpcInfo = rpcId => {
2145
- const info = get$3(rpcId);
2182
+ const info = get$1(rpcId);
2146
2183
  if (!info) {
2147
2184
  throw new Error(`Rpc not found ${rpcId}`);
2148
2185
  }
@@ -2161,7 +2198,7 @@ const emptyStatus = {
2161
2198
  status: None
2162
2199
  };
2163
2200
  const getRuntimeStatus = extensionId => {
2164
- return get$4(extensionId) || emptyStatus;
2201
+ return getRuntimeStatus$1(extensionId) || emptyStatus;
2165
2202
  };
2166
2203
 
2167
2204
  const commandMapRef = {};
@@ -2173,26 +2210,6 @@ const handleMessagePort = async port => {
2173
2210
  });
2174
2211
  };
2175
2212
 
2176
- const initializeExtensionHostWorker = async () => {
2177
- const rpc = await create$6({
2178
- commandMap: commandMapRef,
2179
- async send(port) {
2180
- await sendMessagePortToExtensionHostWorker(port, 0);
2181
- }
2182
- });
2183
- set$6(rpc);
2184
- };
2185
-
2186
- const initializeFileSystemWorker = async () => {
2187
- const rpc = await create$6({
2188
- commandMap: commandMapRef,
2189
- async send(port) {
2190
- await sendMessagePortToFileSystemWorker(port, 0);
2191
- }
2192
- });
2193
- set$5(rpc);
2194
- };
2195
-
2196
2213
  const getRpcRemote = async () => {
2197
2214
  const rpc = await create$4({
2198
2215
  commandMap: commandMapRef,
@@ -2222,15 +2239,13 @@ const getRpc = async platform => {
2222
2239
  const initializeSharedProcess = async platform => {
2223
2240
  const rpc = await getRpc(platform);
2224
2241
  if (rpc) {
2225
- set$3(rpc);
2242
+ set$2(rpc);
2226
2243
  }
2227
2244
  };
2228
2245
 
2229
2246
  const initialize = async platform => {
2230
- update({
2231
- platform
2232
- });
2233
- await Promise.all([initializeFileSystemWorker(), initializeSharedProcess(platform), initializeExtensionHostWorker()]);
2247
+ setPlatform(platform);
2248
+ await initializeSharedProcess(platform);
2234
2249
  };
2235
2250
 
2236
2251
  const installExtension = async () => {
@@ -2297,6 +2312,7 @@ const uninstallExtension = async () => {
2297
2312
  const commandMap = {
2298
2313
  'Extensions.activate2': activateExtension2,
2299
2314
  'Extensions.activate3': activateExtension3,
2315
+ 'Extensions.activateByEvent': activateByEvent,
2300
2316
  'Extensions.addWebExtension': addWebExtension,
2301
2317
  'Extensions.createWebViewWorkerRpc': createWebViewWorkerRpc,
2302
2318
  'Extensions.createWebViewWorkerRpc2': createWebViewWorkerRpc2,
@@ -2323,16 +2339,46 @@ const commandMap = {
2323
2339
  'Extensions.uninstall': uninstallExtension
2324
2340
  };
2325
2341
 
2342
+ const initializeExtensionHostWorker = async () => {
2343
+ const rpc = await create$6({
2344
+ commandMap: commandMapRef,
2345
+ async send(port) {
2346
+ await sendMessagePortToExtensionHostWorker(port, 0);
2347
+ }
2348
+ });
2349
+ set$5(rpc);
2350
+ };
2351
+
2352
+ const initializeFileSystemWorker = async () => {
2353
+ const rpc = await create$6({
2354
+ commandMap: commandMapRef,
2355
+ async send(port) {
2356
+ await sendMessagePortToFileSystemWorker(port, 0);
2357
+ }
2358
+ });
2359
+ set$4(rpc);
2360
+ };
2361
+
2362
+ const initializeIframeWorker = async () => {
2363
+ const rpc = await create$6({
2364
+ commandMap: {},
2365
+ async send(port) {
2366
+ await sendMessagePortToIconThemeWorker(port, 0);
2367
+ }
2368
+ });
2369
+ return rpc;
2370
+ };
2371
+
2326
2372
  const initializeRendererWorker = async () => {
2327
2373
  const rpc = await create$2({
2328
2374
  commandMap: commandMap
2329
2375
  });
2330
- set$4(rpc);
2376
+ set$3(rpc);
2331
2377
  };
2332
2378
 
2333
2379
  const listen = async () => {
2334
2380
  Object.assign(commandMapRef, commandMap);
2335
- await initializeRendererWorker();
2381
+ await Promise.all([initializeRendererWorker(), initializeFileSystemWorker(), initializeIframeWorker(), initializeExtensionHostWorker()]);
2336
2382
  };
2337
2383
 
2338
2384
  const main = async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "3.2.0",
3
+ "version": "3.4.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"