@lvce-editor/renderer-process 6.12.0 → 7.0.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.
@@ -165,6 +165,7 @@ const getModuleId = commandId => {
165
165
  case 'TestFrameWork.showOverlay':
166
166
  return TestFrameWork;
167
167
  case 'Transferrable.transfer':
168
+ case 'Transferrable.transferToWebView':
168
169
  return Transferrable;
169
170
  case 'Viewlet.appendViewlet':
170
171
  case 'Viewlet.dispose':
@@ -538,10 +539,10 @@ const number$1 = value => {
538
539
  const state$1$1 = {
539
540
  callbacks: Object.create(null)
540
541
  };
541
- const set$5 = (id, fn) => {
542
+ const set$6 = (id, fn) => {
542
543
  state$1$1.callbacks[id] = fn;
543
544
  };
544
- const get$6 = id => {
545
+ const get$7 = id => {
545
546
  return state$1$1.callbacks[id];
546
547
  };
547
548
  const remove$2 = id => {
@@ -575,7 +576,7 @@ const registerPromise = () => {
575
576
  resolve,
576
577
  promise
577
578
  } = withResolvers$2();
578
- set$5(id, resolve);
579
+ set$6(id, resolve);
579
580
  return {
580
581
  id,
581
582
  promise
@@ -583,7 +584,7 @@ const registerPromise = () => {
583
584
  };
584
585
  const resolve = (id, args) => {
585
586
  number$1(id);
586
- const fn = get$6(id);
587
+ const fn = get$7(id);
587
588
  if (!fn) {
588
589
  console.log(args);
589
590
  warn$1(`callback ${id} may already be disposed`);
@@ -623,7 +624,6 @@ const getErrorConstructor = (message, type) => {
623
624
  if (type) {
624
625
  switch (type) {
625
626
  case DomException:
626
- // @ts-ignore
627
627
  return DOMException;
628
628
  case TypeError$1:
629
629
  return TypeError;
@@ -648,7 +648,6 @@ const getErrorConstructor = (message, type) => {
648
648
  };
649
649
  const constructError = (message, type, name) => {
650
650
  const ErrorConstructor = getErrorConstructor(message, type);
651
- // @ts-ignore
652
651
  if (ErrorConstructor === DOMException && name) {
653
652
  return new ErrorConstructor(message, name);
654
653
  }
@@ -664,6 +663,13 @@ const constructError = (message, type, name) => {
664
663
  const getNewLineIndex$2 = (string, startIndex = undefined) => {
665
664
  return string.indexOf(NewLine$3, startIndex);
666
665
  };
666
+ const getParentStack = error => {
667
+ let parentStack = error.stack || error.data || error.message || '';
668
+ if (parentStack.startsWith(' at')) {
669
+ parentStack = error.message + NewLine$3 + parentStack;
670
+ }
671
+ return parentStack;
672
+ };
667
673
  const joinLines$2 = lines => {
668
674
  return lines.join(NewLine$3);
669
675
  };
@@ -672,18 +678,11 @@ const Custom = -32001;
672
678
  const splitLines$2 = lines => {
673
679
  return lines.split(NewLine$3);
674
680
  };
675
- const getParentStack = error => {
676
- let parentStack = error.stack || error.data || error.message || '';
677
- if (parentStack.startsWith(' at')) {
678
- parentStack = error.message + NewLine$3 + parentStack;
679
- }
680
- return parentStack;
681
- };
682
681
  const restoreJsonRpcError = error => {
683
682
  if (error && error instanceof Error) {
684
683
  return error;
685
684
  }
686
- const currentStack = joinLines$2(splitLines$2(new Error().stack).slice(1));
685
+ const currentStack = joinLines$2(splitLines$2(new Error().stack || '').slice(1));
687
686
  if (error && error.code && error.code === MethodNotFound) {
688
687
  const restoredError = new JsonRpcError(error.message);
689
688
  const parentStack = getParentStack(error);
@@ -712,7 +711,6 @@ const restoreJsonRpcError = error => {
712
711
  }
713
712
  } else {
714
713
  if (error.stack) {
715
- // TODO accessing stack might be slow
716
714
  const lowerStack = restoredError.stack || '';
717
715
  // @ts-ignore
718
716
  const indexNewLine = getNewLineIndex$2(lowerStack);
@@ -742,6 +740,67 @@ const unwrapJsonRpcResult = responseMessage => {
742
740
  }
743
741
  throw new JsonRpcError('unexpected response message');
744
742
  };
743
+ const isMessagePort$1 = value => {
744
+ return typeof MessagePort !== 'undefined' && value instanceof MessagePort;
745
+ };
746
+ const isInstanceOf = (value, constructorName) => {
747
+ return value?.constructor?.name === constructorName;
748
+ };
749
+ const isMessagePortMain = value => {
750
+ return isInstanceOf(value, 'MessagePortMain');
751
+ };
752
+ const isOffscreenCanvas = value => {
753
+ return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
754
+ };
755
+ const isSocket = value => {
756
+ return isInstanceOf(value, 'Socket');
757
+ };
758
+ const transferrables = [isMessagePort$1, isMessagePortMain, isOffscreenCanvas, isSocket];
759
+ const isTransferrable = value => {
760
+ for (const fn of transferrables) {
761
+ if (fn(value)) {
762
+ return true;
763
+ }
764
+ }
765
+ return false;
766
+ };
767
+ const walkValue = (value, transferrables) => {
768
+ if (!value) {
769
+ return;
770
+ }
771
+ if (isTransferrable(value)) {
772
+ transferrables.push(value);
773
+ }
774
+ if (Array.isArray(value)) {
775
+ for (const item of value) {
776
+ walkValue(item, transferrables);
777
+ }
778
+ return;
779
+ }
780
+ if (typeof value === 'object') {
781
+ for (const property of Object.values(value)) {
782
+ walkValue(property, transferrables);
783
+ }
784
+ }
785
+ };
786
+ const getTransferrables = value => {
787
+ const transferrables = [];
788
+ walkValue(value, transferrables);
789
+ return transferrables;
790
+ };
791
+ const isSingleTransferrable = value => {
792
+ return isSocket(value);
793
+ };
794
+ const getTransferrableParams = value => {
795
+ const transferrables = getTransferrables(value);
796
+ if (transferrables.length === 0) {
797
+ return undefined;
798
+ }
799
+ if (isSingleTransferrable(transferrables[0])) {
800
+ return transferrables[0];
801
+ }
802
+ return transferrables;
803
+ };
745
804
  const create$1$1 = (message, error) => {
746
805
  return {
747
806
  jsonrpc: Two,
@@ -794,7 +853,42 @@ const getResponse = async (message, ipc, execute, preparePrettyError, logError,
794
853
  return getErrorResponse(message, error, preparePrettyError, logError);
795
854
  }
796
855
  };
797
- const handleJsonRpcMessage = async (ipc, message, execute, resolve, preparePrettyError, logError, requiresSocket) => {
856
+ const defaultPreparePrettyError = error => {
857
+ return error;
858
+ };
859
+ const defaultLogError = () => {
860
+ // ignore
861
+ };
862
+ const defaultRequiresSocket = () => {
863
+ return false;
864
+ };
865
+ const defaultResolve = resolve;
866
+ const handleJsonRpcMessage = async (...args) => {
867
+ let message;
868
+ let ipc;
869
+ let execute;
870
+ let preparePrettyError;
871
+ let logError;
872
+ let resolve;
873
+ let requiresSocket;
874
+ if (args.length === 1) {
875
+ const arg = args[0];
876
+ message = arg.message;
877
+ ipc = arg.ipc;
878
+ execute = arg.execute;
879
+ preparePrettyError = arg.preparePrettyError || defaultPreparePrettyError;
880
+ logError = arg.logError || defaultLogError;
881
+ requiresSocket = arg.requiresSocket || defaultRequiresSocket;
882
+ resolve = arg.resolve || defaultResolve;
883
+ } else {
884
+ ipc = args[0];
885
+ message = args[1];
886
+ execute = args[2];
887
+ resolve = args[3];
888
+ preparePrettyError = args[4];
889
+ logError = args[5];
890
+ requiresSocket = args[6];
891
+ }
798
892
  if ('id' in message) {
799
893
  if ('method' in message) {
800
894
  const response = await getResponse(message, ipc, execute, preparePrettyError, logError, requiresSocket);
@@ -829,12 +923,21 @@ const invoke$2 = async (ipc, method, ...params) => {
829
923
  const result = unwrapJsonRpcResult(responseMessage);
830
924
  return result;
831
925
  };
926
+
927
+ // TODO deprecated old typings,
928
+ // always use automatic transferrable detection
832
929
  const invokeAndTransfer$1 = async (ipc, handle, method, ...params) => {
930
+ let transfer = handle;
931
+ if (typeof handle === 'string') {
932
+ params = [method, ...params];
933
+ method = handle;
934
+ transfer = getTransferrableParams(params);
935
+ }
833
936
  const {
834
937
  message,
835
938
  promise
836
939
  } = create$2$1(method, params);
837
- ipc.sendAndTransfer(message, handle);
940
+ ipc.sendAndTransfer(message, transfer);
838
941
  const responseMessage = await promise;
839
942
  const result = unwrapJsonRpcResult(responseMessage);
840
943
  return result;
@@ -1010,8 +1113,8 @@ const sendAndTransfer = (message, transfer) => {
1010
1113
  // @ts-expect-error
1011
1114
  state$9.ipc.sendAndTransfer(message, transfer);
1012
1115
  };
1013
- const invokeAndTransfer = (method, transfer, ...params) => {
1014
- return invokeAndTransfer$1(state$9.ipc, transfer, method, ...params);
1116
+ const invokeAndTransfer = (method, ...params) => {
1117
+ return invokeAndTransfer$1(state$9.ipc, method, ...params);
1015
1118
  };
1016
1119
 
1017
1120
  const RendererWorker = {
@@ -2415,8 +2518,8 @@ const remove$1 = $Element => {
2415
2518
  }
2416
2519
  };
2417
2520
 
2418
- const set$4 = setComponentUid;
2419
- const get$5 = getComponentUid;
2521
+ const set$5 = setComponentUid;
2522
+ const get$6 = getComponentUid;
2420
2523
  const fromEvent = getComponentUidFromEvent;
2421
2524
 
2422
2525
  const startTracking$1 = ($Target, pointerId, handlePointerMove, handlePointerUp) => {
@@ -2902,21 +3005,21 @@ const ConfirmPrompt_ipc = {
2902
3005
  const state$5 = {
2903
3006
  styleSheets: Object.create(null)
2904
3007
  };
2905
- const set$3 = (id, sheet) => {
3008
+ const set$4 = (id, sheet) => {
2906
3009
  state$5.styleSheets[id] = sheet;
2907
3010
  };
2908
- const get$4 = id => {
3011
+ const get$5 = id => {
2909
3012
  return state$5.styleSheets[id];
2910
3013
  };
2911
3014
 
2912
3015
  const addCssStyleSheet = async (id, text) => {
2913
- const existing = get$4(id);
3016
+ const existing = get$5(id);
2914
3017
  if (existing) {
2915
3018
  await existing.replace(text);
2916
3019
  return;
2917
3020
  }
2918
3021
  const sheet = new CSSStyleSheet({});
2919
- set$3(id, sheet);
3022
+ set$4(id, sheet);
2920
3023
  await sheet.replace(text);
2921
3024
  document.adoptedStyleSheets.push(sheet);
2922
3025
  };
@@ -3565,25 +3668,21 @@ const Notification_ipc = {
3565
3668
  const state$2 = {
3566
3669
  canvasObjects: Object.create(null)
3567
3670
  };
3568
- const get$3 = id => {
3671
+ const get$4 = id => {
3569
3672
  return state$2.canvasObjects[id];
3570
3673
  };
3571
- const set$2 = (canvasId, canvas) => {
3674
+ const set$3 = (canvasId, canvas) => {
3572
3675
  state$2.canvasObjects[canvasId] = canvas;
3573
3676
  };
3574
3677
 
3575
- const get$2 = id => {
3576
- return get$3(id);
3678
+ const get$3 = id => {
3679
+ return get$4(id);
3577
3680
  };
3578
- const create$D = (canvasId, callbackId) => {
3681
+ const create$D = async (canvasId, objectId) => {
3579
3682
  const canvas = document.createElement('canvas');
3580
3683
  const offscreenCanvas = canvas.transferControlToOffscreen();
3581
- set$2(canvasId, canvas);
3582
- sendAndTransfer({
3583
- jsonrpc: '2.0',
3584
- id: callbackId,
3585
- params: [offscreenCanvas]
3586
- }, [offscreenCanvas]);
3684
+ set$3(canvasId, canvas);
3685
+ await invokeAndTransfer('Transferrable.transfer', objectId, offscreenCanvas);
3587
3686
  };
3588
3687
 
3589
3688
  const name$f = 'OffscreenCanvas';
@@ -3986,26 +4085,26 @@ const Prompt_ipc = {
3986
4085
  };
3987
4086
 
3988
4087
  const screenCaptures = Object.create(null);
3989
- const get$1 = id => {
4088
+ const get$2 = id => {
3990
4089
  return screenCaptures[id];
3991
4090
  };
3992
- const set$1 = (id, captureStream) => {
4091
+ const set$2 = (id, captureStream) => {
3993
4092
  screenCaptures[id] = captureStream;
3994
4093
  };
3995
4094
  const remove = id => {
3996
4095
  delete screenCaptures[id];
3997
4096
  };
3998
4097
 
3999
- const get = id => {
4098
+ const get$1 = id => {
4000
4099
  number(id);
4001
- return get$1(id);
4100
+ return get$2(id);
4002
4101
  };
4003
4102
  const start = async (id, options) => {
4004
4103
  try {
4005
4104
  number(id);
4006
4105
  object(options);
4007
4106
  const captureStream = await navigator.mediaDevices.getUserMedia(options);
4008
- set$1(id, captureStream);
4107
+ set$2(id, captureStream);
4009
4108
  } catch (error) {
4010
4109
  throw new VError$1(error, `Failed to start screen capture`);
4011
4110
  }
@@ -4013,7 +4112,7 @@ const start = async (id, options) => {
4013
4112
  const dispose$e = async (id, options) => {
4014
4113
  try {
4015
4114
  number(id);
4016
- const captureStream = get$1(id);
4115
+ const captureStream = get$2(id);
4017
4116
  for (const track of captureStream.getTracks()) {
4018
4117
  track.stop();
4019
4118
  }
@@ -4555,6 +4654,14 @@ const TestFrameWork_ipc = {
4555
4654
  name: name$9
4556
4655
  };
4557
4656
 
4657
+ const webViews = Object.create(null);
4658
+ const set$1 = (id, webView) => {
4659
+ webViews[id] = webView;
4660
+ };
4661
+ const get = id => {
4662
+ return webViews[id];
4663
+ };
4664
+
4558
4665
  const objects = Object.create(null);
4559
4666
  const transfer = (objectId, transferable) => {
4560
4667
  objects[objectId] = transferable;
@@ -4565,9 +4672,34 @@ const acquire = objectId => {
4565
4672
  return value;
4566
4673
  };
4567
4674
 
4675
+ // TODO transfer port directly instead of storing
4676
+ // it for a short time in state
4677
+ const transferToWebView = objectId => {
4678
+ const $Iframe = get(1);
4679
+ if (!$Iframe) {
4680
+ throw new Error(`webview not found`);
4681
+ }
4682
+ const {
4683
+ contentWindow
4684
+ } = $Iframe;
4685
+ if (!contentWindow) {
4686
+ throw new Error(`missing content window`);
4687
+ }
4688
+ // TODO use jsonrpc invoke
4689
+ // TODO allow specifying transfer origin from renderer worker
4690
+ // TODO allow specifing method from renderer worker
4691
+ const port = acquire(objectId);
4692
+ contentWindow.postMessage({
4693
+ jsonrpc: '2.0',
4694
+ method: 'handlePort',
4695
+ params: [port]
4696
+ }, '*', [port]);
4697
+ };
4698
+
4568
4699
  const name$8 = 'Transferrable';
4569
4700
  const Commands$9 = {
4570
- transfer: transfer
4701
+ transfer: transfer,
4702
+ transferToWebView: transferToWebView
4571
4703
  };
4572
4704
 
4573
4705
  const Transferrable_ipc = {
@@ -4731,7 +4863,7 @@ const create$C = (id, uid = id) => {
4731
4863
  state$6.instances[id].state.$Viewlet.remove();
4732
4864
  }
4733
4865
  const instanceState = module.create();
4734
- set$4(instanceState.$Viewlet, uid);
4866
+ set$5(instanceState.$Viewlet, uid);
4735
4867
  if (module.attachEvents) {
4736
4868
  module.attachEvents(instanceState);
4737
4869
  }
@@ -6065,7 +6197,7 @@ const create$x = async ({
6065
6197
  }
6066
6198
  const windowIpc = IpcChildWithWindow$1.wrap(window);
6067
6199
  handleIpcOnce(windowIpc);
6068
- const webContentsIds = await invokeAndTransfer$1(windowIpc, [port], 'CreateMessagePort.createMessagePort', ipcId);
6200
+ const webContentsIds = await invokeAndTransfer$1(windowIpc, 'CreateMessagePort.createMessagePort', ipcId, port);
6069
6201
  return webContentsIds;
6070
6202
  };
6071
6203
 
@@ -9014,7 +9146,7 @@ const getUid = () => {
9014
9146
  if (!$Main) {
9015
9147
  return 0;
9016
9148
  }
9017
- return get$5($Main);
9149
+ return get$6($Main);
9018
9150
  };
9019
9151
  const handleTabsWheel = event => {
9020
9152
  const uid = getUid();
@@ -9816,7 +9948,7 @@ const setScreenCapture = (state, id) => {
9816
9948
  $Viewlet
9817
9949
  } = state;
9818
9950
  const $Video = document.createElement('video');
9819
- const screenCapture = get(id);
9951
+ const screenCapture = get$1(id);
9820
9952
  $Video.srcObject = screenCapture;
9821
9953
  $Video.onloadedmetadata = handleLoadedMetaData;
9822
9954
  $Viewlet.append($Video);
@@ -10456,8 +10588,8 @@ const create$4 = () => {
10456
10588
  };
10457
10589
  };
10458
10590
  const setTerminal = (state, canvasCursorId, canvasTextId) => {
10459
- const canvasText = get$2(canvasTextId);
10460
- const canvasCursor = get$2(canvasCursorId);
10591
+ const canvasText = get$3(canvasTextId);
10592
+ const canvasCursor = get$3(canvasCursorId);
10461
10593
  const {
10462
10594
  $Viewlet
10463
10595
  } = state;
@@ -10933,7 +11065,7 @@ const setMenus = (state, changes, uid) => {
10933
11065
  const menu = change[1];
10934
11066
  const dom = change[2];
10935
11067
  const $Menu = create$Menu();
10936
- set$4($Menu, uid);
11068
+ set$5($Menu, uid);
10937
11069
  $Menu.onmouseover = handleMenuMouseOver;
10938
11070
  $Menu.onclick = handleMenuClick;
10939
11071
  const {
@@ -11389,16 +11521,20 @@ const setIframe = (state, src, sandbox = []) => {
11389
11521
  for (const element of sandbox) {
11390
11522
  $Iframe.sandbox.add(element);
11391
11523
  }
11392
- $Iframe.className = 'E2eTestIframe';
11524
+ $Iframe.className = 'E2eTestIframe WebViewIframe';
11393
11525
  $Iframe.src = src;
11394
11526
  $Parent.append($Iframe);
11395
11527
  state.frame = $Iframe;
11528
+ set$1(1, $Iframe);
11396
11529
  };
11397
11530
  const setPort = (state, portId, origin) => {
11398
11531
  const port = acquire(portId);
11399
11532
  const {
11400
11533
  frame
11401
11534
  } = state;
11535
+ // TODO wait for load in renderer worker
11536
+ // TODO avoid closure
11537
+ // TODO use jsonrpc invoke
11402
11538
  frame.addEventListener('load', () => {
11403
11539
  const {
11404
11540
  contentWindow
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/renderer-process",
3
- "version": "6.12.0",
3
+ "version": "7.0.0",
4
4
  "description": "",
5
5
  "main": "dist/diffWorkerMain.js",
6
6
  "type": "module",