@lvce-editor/extension-management-worker 1.0.0 → 1.2.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.
@@ -368,6 +368,100 @@ const IpcChildWithModuleWorkerAndMessagePort$1 = {
368
368
  listen: listen$6,
369
369
  wrap: wrap$e
370
370
  };
371
+ const addListener = (emitter, type, callback) => {
372
+ if ('addEventListener' in emitter) {
373
+ emitter.addEventListener(type, callback);
374
+ } else {
375
+ emitter.on(type, callback);
376
+ }
377
+ };
378
+ const removeListener = (emitter, type, callback) => {
379
+ if ('removeEventListener' in emitter) {
380
+ emitter.removeEventListener(type, callback);
381
+ } else {
382
+ emitter.off(type, callback);
383
+ }
384
+ };
385
+ const getFirstEvent = (eventEmitter, eventMap) => {
386
+ const {
387
+ resolve,
388
+ promise
389
+ } = Promise.withResolvers();
390
+ const listenerMap = Object.create(null);
391
+ const cleanup = value => {
392
+ for (const event of Object.keys(eventMap)) {
393
+ removeListener(eventEmitter, event, listenerMap[event]);
394
+ }
395
+ resolve(value);
396
+ };
397
+ for (const [event, type] of Object.entries(eventMap)) {
398
+ const listener = event => {
399
+ cleanup({
400
+ type,
401
+ event
402
+ });
403
+ };
404
+ addListener(eventEmitter, event, listener);
405
+ listenerMap[event] = listener;
406
+ }
407
+ return promise;
408
+ };
409
+ const Message$1 = 3;
410
+ const create$5$1 = async ({
411
+ messagePort,
412
+ isMessagePortOpen
413
+ }) => {
414
+ if (!isMessagePort(messagePort)) {
415
+ throw new IpcError('port must be of type MessagePort');
416
+ }
417
+ if (isMessagePortOpen) {
418
+ return messagePort;
419
+ }
420
+ const eventPromise = getFirstEvent(messagePort, {
421
+ message: Message$1
422
+ });
423
+ messagePort.start();
424
+ const {
425
+ type,
426
+ event
427
+ } = await eventPromise;
428
+ if (type !== Message$1) {
429
+ throw new IpcError('Failed to wait for ipc message');
430
+ }
431
+ if (event.data !== readyMessage) {
432
+ throw new IpcError('unexpected first message');
433
+ }
434
+ return messagePort;
435
+ };
436
+ const signal$1 = messagePort => {
437
+ messagePort.start();
438
+ };
439
+ class IpcParentWithMessagePort extends Ipc {
440
+ getData = getData$2;
441
+ send(message) {
442
+ this._rawIpc.postMessage(message);
443
+ }
444
+ sendAndTransfer(message) {
445
+ const transfer = getTransferrables(message);
446
+ this._rawIpc.postMessage(message, transfer);
447
+ }
448
+ dispose() {
449
+ this._rawIpc.close();
450
+ }
451
+ onMessage(callback) {
452
+ this._rawIpc.addEventListener('message', callback);
453
+ }
454
+ onClose(callback) {}
455
+ }
456
+ const wrap$5 = messagePort => {
457
+ return new IpcParentWithMessagePort(messagePort);
458
+ };
459
+ const IpcParentWithMessagePort$1 = {
460
+ __proto__: null,
461
+ create: create$5$1,
462
+ signal: signal$1,
463
+ wrap: wrap$5
464
+ };
371
465
 
372
466
  const Two = '2.0';
373
467
  const create$4 = (method, params) => {
@@ -625,7 +719,7 @@ const getErrorResponse = (id, error, preparePrettyError, logError) => {
625
719
  const errorProperty = getErrorProperty(error, prettyError);
626
720
  return create$1$1(id, errorProperty);
627
721
  };
628
- const create$5 = (message, result) => {
722
+ const create$6 = (message, result) => {
629
723
  return {
630
724
  jsonrpc: Two,
631
725
  id: message.id,
@@ -634,7 +728,7 @@ const create$5 = (message, result) => {
634
728
  };
635
729
  const getSuccessResponse = (message, result) => {
636
730
  const resultProperty = result ?? null;
637
- return create$5(message, resultProperty);
731
+ return create$6(message, resultProperty);
638
732
  };
639
733
  const getErrorResponseSimple = (id, error) => {
640
734
  return {
@@ -742,7 +836,7 @@ const send = (transport, method, ...params) => {
742
836
  const message = create$4(method, params);
743
837
  transport.send(message);
744
838
  };
745
- const invoke = (ipc, method, ...params) => {
839
+ const invoke$1 = (ipc, method, ...params) => {
746
840
  return invokeHelper(ipc, method, params, false);
747
841
  };
748
842
  const invokeAndTransfer = (ipc, method, ...params) => {
@@ -781,7 +875,7 @@ const createRpc = ipc => {
781
875
  send(ipc, method, ...params);
782
876
  },
783
877
  invoke(method, ...params) {
784
- return invoke(ipc, method, ...params);
878
+ return invoke$1(ipc, method, ...params);
785
879
  },
786
880
  invokeAndTransfer(method, ...params) {
787
881
  return invokeAndTransfer(ipc, method, ...params);
@@ -822,6 +916,26 @@ const listen$1 = async (module, options) => {
822
916
  const ipc = module.wrap(rawIpc);
823
917
  return ipc;
824
918
  };
919
+ const create$5 = async ({
920
+ commandMap,
921
+ messagePort
922
+ }) => {
923
+ // TODO create a commandMap per rpc instance
924
+ register(commandMap);
925
+ const rawIpc = await IpcParentWithMessagePort$1.create({
926
+ messagePort,
927
+ isMessagePortOpen: true
928
+ });
929
+ const ipc = IpcParentWithMessagePort$1.wrap(rawIpc);
930
+ handleIpc(ipc);
931
+ const rpc = createRpc(ipc);
932
+ messagePort.start();
933
+ return rpc;
934
+ };
935
+ const PlainMessagePortRpc = {
936
+ __proto__: null,
937
+ create: create$5
938
+ };
825
939
  const create$1 = async ({
826
940
  commandMap
827
941
  }) => {
@@ -872,7 +986,12 @@ const create = rpcId => {
872
986
  };
873
987
 
874
988
  const {
989
+ invoke,
875
990
  set} = create(RendererWorker);
991
+ const getExtension$1 = async id => {
992
+ // @ts-ignore
993
+ return invoke('ExtensionManagement.getExtension', id);
994
+ };
876
995
 
877
996
  const disableExtension = async () => {
878
997
  // TODO
@@ -882,6 +1001,21 @@ const enableExtension = async () => {
882
1001
  // TODO
883
1002
  };
884
1003
 
1004
+ const getExtension = async id => {
1005
+ // TODO
1006
+ const extension = await getExtension$1(id);
1007
+ return extension;
1008
+ };
1009
+
1010
+ const commandMapRef = {};
1011
+
1012
+ const handleMessagePort = async port => {
1013
+ await PlainMessagePortRpc.create({
1014
+ commandMap: commandMapRef,
1015
+ messagePort: port
1016
+ });
1017
+ };
1018
+
885
1019
  const installExtension = async () => {
886
1020
  // TODO
887
1021
  };
@@ -893,11 +1027,14 @@ const uninstallExtension = async () => {
893
1027
  const commandMap = {
894
1028
  'Extensions.disable': disableExtension,
895
1029
  'Extensions.enable': enableExtension,
1030
+ 'Extensions.getExtension': getExtension,
1031
+ 'Extensions.handleMessagePort': handleMessagePort,
896
1032
  'Extensions.install': installExtension,
897
1033
  'Extensions.uninstall': uninstallExtension
898
1034
  };
899
1035
 
900
1036
  const listen = async () => {
1037
+ Object.assign(commandMapRef, commandMap);
901
1038
  const rpc = await WebWorkerRpcClient.create({
902
1039
  commandMap: commandMap
903
1040
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-management-worker",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Webworker for the Extension Management functionality in Lvce Editor.",
5
5
  "keywords": [
6
6
  "web-worker"