@lvce-editor/ipc 10.0.2 → 10.0.3

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.
package/dist/electron.js CHANGED
@@ -496,6 +496,46 @@ class ChildProcessError extends Error {
496
496
  }
497
497
  }
498
498
 
499
+ const removeValues = (value, toRemove) => {
500
+ if (!value) {
501
+ return value;
502
+ }
503
+ if (Array.isArray(value)) {
504
+ const newItems = [];
505
+ for (const item of value) {
506
+ if (!toRemove.includes(item)) {
507
+ newItems.push(removeValues(item, toRemove));
508
+ }
509
+ }
510
+ return newItems;
511
+ }
512
+ if (typeof value === 'object') {
513
+ const newObject = Object.create(null);
514
+ for (const [key, property] of Object.entries(value)) {
515
+ if (!toRemove.includes(property)) {
516
+ newObject[key] = removeValues(property, toRemove);
517
+ }
518
+ }
519
+ return newObject;
520
+ }
521
+ return value;
522
+ };
523
+
524
+ // workaround for node not supporting transferrable objects
525
+ // as parameters. If the transferrable object is a parameter,
526
+ // it is received as a plain object is received in the receiving process
527
+ const fixNodeParameters = value => {
528
+ const transfer = getTransferrables(value);
529
+ if (transfer.length === 0) {
530
+ throw new Error('no transferrables found');
531
+ }
532
+ const newValue = removeValues(value, transfer);
533
+ return {
534
+ newValue,
535
+ transfer: transfer[0]
536
+ };
537
+ };
538
+
499
539
  // @ts-ignore
500
540
  const getFirstNodeChildProcessEvent = async childProcess => {
501
541
  // @ts-ignore
@@ -569,14 +609,6 @@ const getFirstNodeChildProcessEvent = async childProcess => {
569
609
  };
570
610
  };
571
611
 
572
- const getTransferrablesNode = value => {
573
- const transferrables = getTransferrables(value);
574
- if (transferrables.length === 0) {
575
- throw new Error(`no transferrables found`);
576
- }
577
- return transferrables[0];
578
- };
579
-
580
612
  // @ts-ignore
581
613
  const create$1 = async ({
582
614
  path,
@@ -629,8 +661,11 @@ class IpcParentWithNodeForkedProcess extends Ipc {
629
661
  this._rawIpc.send(message);
630
662
  }
631
663
  sendAndTransfer(message) {
632
- const transfer = getTransferrablesNode(message);
633
- this._rawIpc.send(message, transfer);
664
+ const {
665
+ newValue,
666
+ transfer
667
+ } = fixNodeParameters(message);
668
+ this._rawIpc.send(newValue, transfer);
634
669
  }
635
670
  dispose() {
636
671
  this._rawIpc.kill();
@@ -761,8 +796,11 @@ const wrap = worker => {
761
796
  },
762
797
  // @ts-ignore
763
798
  sendAndTransfer(message) {
764
- const transfer = getTransferrablesNode(message);
765
- this.worker.postMessage(message, transfer);
799
+ const {
800
+ newValue,
801
+ transfer
802
+ } = fixNodeParameters(message);
803
+ this.worker.postMessage(newValue, transfer);
766
804
  },
767
805
  dispose() {
768
806
  this.worker.terminate();
package/dist/index.js CHANGED
@@ -275,7 +275,7 @@ const listen$8 = ({
275
275
  const signal$6 = messagePort => {
276
276
  messagePort.start();
277
277
  };
278
- const getActualData = event => {
278
+ const getActualData$1 = event => {
279
279
  const {
280
280
  data,
281
281
  ports
@@ -293,7 +293,7 @@ class IpcChildWithElectronMessagePort extends Ipc {
293
293
  super(port);
294
294
  }
295
295
  getData(event) {
296
- return getActualData(event);
296
+ return getActualData$1(event);
297
297
  }
298
298
  send(message) {
299
299
  this._rawIpc.postMessage(message);
@@ -524,6 +524,16 @@ const getTransferrablesNode = value => {
524
524
  return transferrables[0];
525
525
  };
526
526
 
527
+ const getActualData = (message, handle) => {
528
+ if (handle) {
529
+ return {
530
+ ...message,
531
+ params: [handle, ...message.params]
532
+ };
533
+ }
534
+ return message;
535
+ };
536
+
527
537
  const listen$4 = async () => {
528
538
  if (!process.send) {
529
539
  throw new Error('process.send must be defined');
@@ -537,8 +547,8 @@ class IpcChildWithNodeForkedProcess extends Ipc {
537
547
  constructor(process) {
538
548
  super(process);
539
549
  }
540
- getData(message) {
541
- return message;
550
+ getData(message, handle) {
551
+ return getActualData(message, handle);
542
552
  }
543
553
  onClose(callback) {
544
554
  this._rawIpc.on('close', callback);
@@ -630,9 +640,9 @@ const wrap$5 = parentPort => {
630
640
  return {
631
641
  parentPort,
632
642
  on(event, listener) {
633
- const wrappedListener = message => {
643
+ const wrappedListener = (message, handle) => {
634
644
  const event = {
635
- data: message,
645
+ data: getActualData(message, handle),
636
646
  target: this
637
647
  };
638
648
  listener(event);
@@ -1053,6 +1063,21 @@ class ChildProcessError extends Error {
1053
1063
  }
1054
1064
  }
1055
1065
 
1066
+ // workaround for node not supporting transferrable objects
1067
+ // as parameters. If the transferrable object is a parameter,
1068
+ // it is received as a plain object is received in the receiving process
1069
+ const fixNodeParameters = value => {
1070
+ const transfer = getTransferrables(value);
1071
+ if (transfer.length === 0) {
1072
+ throw new Error('no transferrables found');
1073
+ }
1074
+ const newValue = removeValues(value, transfer);
1075
+ return {
1076
+ newValue,
1077
+ transfer: transfer[0]
1078
+ };
1079
+ };
1080
+
1056
1081
  // @ts-ignore
1057
1082
  const getFirstNodeChildProcessEvent = async childProcess => {
1058
1083
  // @ts-ignore
@@ -1178,8 +1203,11 @@ class IpcParentWithNodeForkedProcess extends Ipc {
1178
1203
  this._rawIpc.send(message);
1179
1204
  }
1180
1205
  sendAndTransfer(message) {
1181
- const transfer = getTransferrablesNode(message);
1182
- this._rawIpc.send(message, transfer);
1206
+ const {
1207
+ newValue,
1208
+ transfer
1209
+ } = fixNodeParameters(message);
1210
+ this._rawIpc.send(newValue, transfer);
1183
1211
  }
1184
1212
  dispose() {
1185
1213
  this._rawIpc.kill();
@@ -1269,8 +1297,11 @@ const wrap = worker => {
1269
1297
  },
1270
1298
  // @ts-ignore
1271
1299
  sendAndTransfer(message) {
1272
- const transfer = getTransferrablesNode(message);
1273
- this.worker.postMessage(message, transfer);
1300
+ const {
1301
+ newValue,
1302
+ transfer
1303
+ } = fixNodeParameters(message);
1304
+ this.worker.postMessage(newValue, transfer);
1274
1305
  },
1275
1306
  dispose() {
1276
1307
  this.worker.terminate();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/ipc",
3
- "version": "10.0.2",
3
+ "version": "10.0.3",
4
4
  "description": "Inter Process Communication for Lvce Editor",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",