@lvce-editor/ipc 10.0.1 → 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
@@ -524,15 +524,6 @@ const getTransferrablesNode = value => {
524
524
  return transferrables[0];
525
525
  };
526
526
 
527
- const listen$4 = async () => {
528
- if (!process.send) {
529
- throw new Error('process.send must be defined');
530
- }
531
- return process;
532
- };
533
- const signal$3 = process => {
534
- process.send(readyMessage);
535
- };
536
527
  const getActualData = (message, handle) => {
537
528
  if (handle) {
538
529
  return {
@@ -542,6 +533,16 @@ const getActualData = (message, handle) => {
542
533
  }
543
534
  return message;
544
535
  };
536
+
537
+ const listen$4 = async () => {
538
+ if (!process.send) {
539
+ throw new Error('process.send must be defined');
540
+ }
541
+ return process;
542
+ };
543
+ const signal$3 = process => {
544
+ process.send(readyMessage);
545
+ };
545
546
  class IpcChildWithNodeForkedProcess extends Ipc {
546
547
  constructor(process) {
547
548
  super(process);
@@ -639,9 +640,9 @@ const wrap$5 = parentPort => {
639
640
  return {
640
641
  parentPort,
641
642
  on(event, listener) {
642
- const wrappedListener = message => {
643
+ const wrappedListener = (message, handle) => {
643
644
  const event = {
644
- data: message,
645
+ data: getActualData(message, handle),
645
646
  target: this
646
647
  };
647
648
  listener(event);
@@ -1062,6 +1063,21 @@ class ChildProcessError extends Error {
1062
1063
  }
1063
1064
  }
1064
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
+
1065
1081
  // @ts-ignore
1066
1082
  const getFirstNodeChildProcessEvent = async childProcess => {
1067
1083
  // @ts-ignore
@@ -1187,8 +1203,11 @@ class IpcParentWithNodeForkedProcess extends Ipc {
1187
1203
  this._rawIpc.send(message);
1188
1204
  }
1189
1205
  sendAndTransfer(message) {
1190
- const transfer = getTransferrablesNode(message);
1191
- this._rawIpc.send(message, transfer);
1206
+ const {
1207
+ newValue,
1208
+ transfer
1209
+ } = fixNodeParameters(message);
1210
+ this._rawIpc.send(newValue, transfer);
1192
1211
  }
1193
1212
  dispose() {
1194
1213
  this._rawIpc.kill();
@@ -1278,8 +1297,11 @@ const wrap = worker => {
1278
1297
  },
1279
1298
  // @ts-ignore
1280
1299
  sendAndTransfer(message) {
1281
- const transfer = getTransferrablesNode(message);
1282
- this.worker.postMessage(message, transfer);
1300
+ const {
1301
+ newValue,
1302
+ transfer
1303
+ } = fixNodeParameters(message);
1304
+ this.worker.postMessage(newValue, transfer);
1283
1305
  },
1284
1306
  dispose() {
1285
1307
  this.worker.terminate();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/ipc",
3
- "version": "10.0.1",
3
+ "version": "10.0.3",
4
4
  "description": "Inter Process Communication for Lvce Editor",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -16,7 +16,7 @@
16
16
  "dependencies": {
17
17
  "@lvce-editor/assert": "^1.2.0",
18
18
  "@lvce-editor/verror": "^1.4.0",
19
- "@lvce-editor/web-socket-server": "^1.2.0"
19
+ "@lvce-editor/web-socket-server": "^1.3.0"
20
20
  },
21
21
  "engines": {
22
22
  "node": ">=18"