@lvce-editor/ipc 10.0.2 → 10.0.4
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 +126 -73
- package/dist/index.js +46 -12
- package/package.json +1 -1
package/dist/electron.js
CHANGED
|
@@ -37,6 +37,102 @@ const Exit = 1;
|
|
|
37
37
|
const Error$1 = 2;
|
|
38
38
|
const Message = 3;
|
|
39
39
|
|
|
40
|
+
const walkValue = (value, transferrables, isTransferrable) => {
|
|
41
|
+
if (!value) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (isTransferrable(value)) {
|
|
45
|
+
transferrables.push(value);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (Array.isArray(value)) {
|
|
49
|
+
for (const item of value) {
|
|
50
|
+
walkValue(item, transferrables, isTransferrable);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (typeof value === 'object') {
|
|
55
|
+
for (const property of Object.values(value)) {
|
|
56
|
+
walkValue(property, transferrables, isTransferrable);
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const isMessagePort = value => {
|
|
63
|
+
return value && value instanceof MessagePort;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const isMessagePortMain = value => {
|
|
67
|
+
return value && value.constructor && value.constructor.name === 'MessagePortMain';
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const isOffscreenCanvas = value => {
|
|
71
|
+
return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const isInstanceOf = (value, constructorName) => {
|
|
75
|
+
return value?.constructor?.name === constructorName;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const isSocket = value => {
|
|
79
|
+
return isInstanceOf(value, 'Socket');
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
|
|
83
|
+
|
|
84
|
+
const isTransferrable = value => {
|
|
85
|
+
for (const fn of transferrables) {
|
|
86
|
+
if (fn(value)) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const getTransferrables = value => {
|
|
94
|
+
const transferrables = [];
|
|
95
|
+
walkValue(value, transferrables, isTransferrable);
|
|
96
|
+
return transferrables;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const removeValues = (value, toRemove) => {
|
|
100
|
+
if (!value) {
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
if (Array.isArray(value)) {
|
|
104
|
+
const newItems = [];
|
|
105
|
+
for (const item of value) {
|
|
106
|
+
if (!toRemove.includes(item)) {
|
|
107
|
+
newItems.push(removeValues(item, toRemove));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return newItems;
|
|
111
|
+
}
|
|
112
|
+
if (typeof value === 'object') {
|
|
113
|
+
const newObject = Object.create(null);
|
|
114
|
+
for (const [key, property] of Object.entries(value)) {
|
|
115
|
+
if (!toRemove.includes(property)) {
|
|
116
|
+
newObject[key] = removeValues(property, toRemove);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return newObject;
|
|
120
|
+
}
|
|
121
|
+
return value;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
// workaround for electron not supporting transferrable objects
|
|
125
|
+
// as parameters. If the transferrable object is a parameter, in electron
|
|
126
|
+
// only an empty objected is received in the main process
|
|
127
|
+
const fixElectronParameters = value => {
|
|
128
|
+
const transfer = getTransferrables(value);
|
|
129
|
+
const newValue = removeValues(value, transfer);
|
|
130
|
+
return {
|
|
131
|
+
newValue,
|
|
132
|
+
transfer
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
|
|
40
136
|
const withResolvers = () => {
|
|
41
137
|
let _resolve;
|
|
42
138
|
const promise = new Promise(resolve => {
|
|
@@ -340,65 +436,6 @@ class IpcError extends VError {
|
|
|
340
436
|
}
|
|
341
437
|
}
|
|
342
438
|
|
|
343
|
-
const walkValue = (value, transferrables, isTransferrable) => {
|
|
344
|
-
if (!value) {
|
|
345
|
-
return;
|
|
346
|
-
}
|
|
347
|
-
if (isTransferrable(value)) {
|
|
348
|
-
transferrables.push(value);
|
|
349
|
-
return;
|
|
350
|
-
}
|
|
351
|
-
if (Array.isArray(value)) {
|
|
352
|
-
for (const item of value) {
|
|
353
|
-
walkValue(item, transferrables, isTransferrable);
|
|
354
|
-
}
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
if (typeof value === 'object') {
|
|
358
|
-
for (const property of Object.values(value)) {
|
|
359
|
-
walkValue(property, transferrables, isTransferrable);
|
|
360
|
-
}
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
|
|
365
|
-
const isMessagePort = value => {
|
|
366
|
-
return value && value instanceof MessagePort;
|
|
367
|
-
};
|
|
368
|
-
|
|
369
|
-
const isMessagePortMain = value => {
|
|
370
|
-
return value && value.constructor && value.constructor.name === 'MessagePortMain';
|
|
371
|
-
};
|
|
372
|
-
|
|
373
|
-
const isOffscreenCanvas = value => {
|
|
374
|
-
return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
|
|
375
|
-
};
|
|
376
|
-
|
|
377
|
-
const isInstanceOf = (value, constructorName) => {
|
|
378
|
-
return value?.constructor?.name === constructorName;
|
|
379
|
-
};
|
|
380
|
-
|
|
381
|
-
const isSocket = value => {
|
|
382
|
-
return isInstanceOf(value, 'Socket');
|
|
383
|
-
};
|
|
384
|
-
|
|
385
|
-
const transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
|
|
386
|
-
|
|
387
|
-
const isTransferrable = value => {
|
|
388
|
-
for (const fn of transferrables) {
|
|
389
|
-
if (fn(value)) {
|
|
390
|
-
return true;
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
return false;
|
|
394
|
-
};
|
|
395
|
-
|
|
396
|
-
const getTransferrables = value => {
|
|
397
|
-
const transferrables = [];
|
|
398
|
-
walkValue(value, transferrables, isTransferrable);
|
|
399
|
-
return transferrables;
|
|
400
|
-
};
|
|
401
|
-
|
|
402
439
|
// @ts-ignore
|
|
403
440
|
const create$2 = async ({
|
|
404
441
|
path,
|
|
@@ -447,8 +484,11 @@ class IpcParentWithElectronUtilityProcess extends Ipc {
|
|
|
447
484
|
this._rawIpc.postMessage(message);
|
|
448
485
|
}
|
|
449
486
|
sendAndTransfer(message) {
|
|
450
|
-
const
|
|
451
|
-
|
|
487
|
+
const {
|
|
488
|
+
newValue,
|
|
489
|
+
transfer
|
|
490
|
+
} = fixElectronParameters(message);
|
|
491
|
+
this._rawIpc.postMessage(newValue, transfer);
|
|
452
492
|
}
|
|
453
493
|
dispose() {
|
|
454
494
|
this._rawIpc.kill();
|
|
@@ -496,6 +536,21 @@ class ChildProcessError extends Error {
|
|
|
496
536
|
}
|
|
497
537
|
}
|
|
498
538
|
|
|
539
|
+
// workaround for node not supporting transferrable objects
|
|
540
|
+
// as parameters. If the transferrable object is a parameter,
|
|
541
|
+
// it is received as a plain object is received in the receiving process
|
|
542
|
+
const fixNodeParameters = value => {
|
|
543
|
+
const transfer = getTransferrables(value);
|
|
544
|
+
if (transfer.length === 0) {
|
|
545
|
+
throw new Error('no transferrables found');
|
|
546
|
+
}
|
|
547
|
+
const newValue = removeValues(value, transfer);
|
|
548
|
+
return {
|
|
549
|
+
newValue,
|
|
550
|
+
transfer: transfer[0]
|
|
551
|
+
};
|
|
552
|
+
};
|
|
553
|
+
|
|
499
554
|
// @ts-ignore
|
|
500
555
|
const getFirstNodeChildProcessEvent = async childProcess => {
|
|
501
556
|
// @ts-ignore
|
|
@@ -569,14 +624,6 @@ const getFirstNodeChildProcessEvent = async childProcess => {
|
|
|
569
624
|
};
|
|
570
625
|
};
|
|
571
626
|
|
|
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
627
|
// @ts-ignore
|
|
581
628
|
const create$1 = async ({
|
|
582
629
|
path,
|
|
@@ -629,8 +676,11 @@ class IpcParentWithNodeForkedProcess extends Ipc {
|
|
|
629
676
|
this._rawIpc.send(message);
|
|
630
677
|
}
|
|
631
678
|
sendAndTransfer(message) {
|
|
632
|
-
const
|
|
633
|
-
|
|
679
|
+
const {
|
|
680
|
+
newValue,
|
|
681
|
+
transfer
|
|
682
|
+
} = fixNodeParameters(message);
|
|
683
|
+
this._rawIpc.send(newValue, transfer);
|
|
634
684
|
}
|
|
635
685
|
dispose() {
|
|
636
686
|
this._rawIpc.kill();
|
|
@@ -761,8 +811,11 @@ const wrap = worker => {
|
|
|
761
811
|
},
|
|
762
812
|
// @ts-ignore
|
|
763
813
|
sendAndTransfer(message) {
|
|
764
|
-
const
|
|
765
|
-
|
|
814
|
+
const {
|
|
815
|
+
newValue,
|
|
816
|
+
transfer
|
|
817
|
+
} = fixNodeParameters(message);
|
|
818
|
+
this.worker.postMessage(newValue, transfer);
|
|
766
819
|
},
|
|
767
820
|
dispose() {
|
|
768
821
|
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);
|
|
@@ -1004,8 +1014,11 @@ class IpcParentWithElectronUtilityProcess extends Ipc {
|
|
|
1004
1014
|
this._rawIpc.postMessage(message);
|
|
1005
1015
|
}
|
|
1006
1016
|
sendAndTransfer(message) {
|
|
1007
|
-
const
|
|
1008
|
-
|
|
1017
|
+
const {
|
|
1018
|
+
newValue,
|
|
1019
|
+
transfer
|
|
1020
|
+
} = fixElectronParameters(message);
|
|
1021
|
+
this._rawIpc.postMessage(newValue, transfer);
|
|
1009
1022
|
}
|
|
1010
1023
|
dispose() {
|
|
1011
1024
|
this._rawIpc.kill();
|
|
@@ -1053,6 +1066,21 @@ class ChildProcessError extends Error {
|
|
|
1053
1066
|
}
|
|
1054
1067
|
}
|
|
1055
1068
|
|
|
1069
|
+
// workaround for node not supporting transferrable objects
|
|
1070
|
+
// as parameters. If the transferrable object is a parameter,
|
|
1071
|
+
// it is received as a plain object is received in the receiving process
|
|
1072
|
+
const fixNodeParameters = value => {
|
|
1073
|
+
const transfer = getTransferrables(value);
|
|
1074
|
+
if (transfer.length === 0) {
|
|
1075
|
+
throw new Error('no transferrables found');
|
|
1076
|
+
}
|
|
1077
|
+
const newValue = removeValues(value, transfer);
|
|
1078
|
+
return {
|
|
1079
|
+
newValue,
|
|
1080
|
+
transfer: transfer[0]
|
|
1081
|
+
};
|
|
1082
|
+
};
|
|
1083
|
+
|
|
1056
1084
|
// @ts-ignore
|
|
1057
1085
|
const getFirstNodeChildProcessEvent = async childProcess => {
|
|
1058
1086
|
// @ts-ignore
|
|
@@ -1178,8 +1206,11 @@ class IpcParentWithNodeForkedProcess extends Ipc {
|
|
|
1178
1206
|
this._rawIpc.send(message);
|
|
1179
1207
|
}
|
|
1180
1208
|
sendAndTransfer(message) {
|
|
1181
|
-
const
|
|
1182
|
-
|
|
1209
|
+
const {
|
|
1210
|
+
newValue,
|
|
1211
|
+
transfer
|
|
1212
|
+
} = fixNodeParameters(message);
|
|
1213
|
+
this._rawIpc.send(newValue, transfer);
|
|
1183
1214
|
}
|
|
1184
1215
|
dispose() {
|
|
1185
1216
|
this._rawIpc.kill();
|
|
@@ -1269,8 +1300,11 @@ const wrap = worker => {
|
|
|
1269
1300
|
},
|
|
1270
1301
|
// @ts-ignore
|
|
1271
1302
|
sendAndTransfer(message) {
|
|
1272
|
-
const
|
|
1273
|
-
|
|
1303
|
+
const {
|
|
1304
|
+
newValue,
|
|
1305
|
+
transfer
|
|
1306
|
+
} = fixNodeParameters(message);
|
|
1307
|
+
this.worker.postMessage(newValue, transfer);
|
|
1274
1308
|
},
|
|
1275
1309
|
dispose() {
|
|
1276
1310
|
this.worker.terminate();
|