@lvce-editor/ipc 9.5.0 → 10.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.
package/dist/browser.js CHANGED
@@ -2,6 +2,67 @@ const getData$1 = event => {
2
2
  return event.data;
3
3
  };
4
4
 
5
+ const isMessagePort = value => {
6
+ return value && value instanceof MessagePort;
7
+ };
8
+
9
+ const isMessagePortMain = value => {
10
+ return value && value.constructor && value.constructor.name === 'MessagePortMain';
11
+ };
12
+
13
+ const isOffscreenCanvas = value => {
14
+ return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
15
+ };
16
+
17
+ const isInstanceOf = (value, constructorName) => {
18
+ return value?.constructor?.name === constructorName;
19
+ };
20
+
21
+ const isSocket = value => {
22
+ return isInstanceOf(value, 'Socket');
23
+ };
24
+
25
+ const transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
26
+
27
+ const isTransferrable = value => {
28
+ for (const fn of transferrables) {
29
+ if (fn(value)) {
30
+ return true;
31
+ }
32
+ }
33
+ return false;
34
+ };
35
+
36
+ const walkValue = (value, transferrables) => {
37
+ if (!value) {
38
+ return value;
39
+ }
40
+ if (isTransferrable(value)) {
41
+ transferrables.push(value);
42
+ return;
43
+ }
44
+ if (Array.isArray(value)) {
45
+ for (const item of value) {
46
+ walkValue(item, transferrables);
47
+ }
48
+ return;
49
+ }
50
+ if (typeof value === 'object') {
51
+ const newObject = Object.create(null);
52
+ for (const property of Object.values(value)) {
53
+ walkValue(property, transferrables);
54
+ }
55
+ return newObject;
56
+ }
57
+ return value;
58
+ };
59
+
60
+ const getTransferrables = value => {
61
+ const transferrables = [];
62
+ walkValue(value, transferrables);
63
+ return transferrables;
64
+ };
65
+
5
66
  const attachEvents = that => {
6
67
  const handleMessage = (...args) => {
7
68
  const data = that.getData(...args);
@@ -44,7 +105,8 @@ class IpcChildWithModuleWorker extends Ipc {
44
105
  // @ts-ignore
45
106
  this._rawIpc.postMessage(message);
46
107
  }
47
- sendAndTransfer(message, transfer) {
108
+ sendAndTransfer(message) {
109
+ const transfer = getTransferrables(message);
48
110
  // @ts-ignore
49
111
  this._rawIpc.postMessage(message, transfer);
50
112
  }
@@ -320,7 +382,8 @@ class IpcChildWithModuleWorkerAndMessagePort extends Ipc {
320
382
  send(message) {
321
383
  this._rawIpc.postMessage(message);
322
384
  }
323
- sendAndTransfer(message, transfer) {
385
+ sendAndTransfer(message) {
386
+ const transfer = getTransferrables(message);
324
387
  this._rawIpc.postMessage(message, transfer);
325
388
  }
326
389
  dispose() {
@@ -352,14 +415,15 @@ const listen$2 = () => {
352
415
  const signal$2 = global => {
353
416
  global.postMessage(readyMessage);
354
417
  };
355
- let IpcChildWithWindow$1 = class IpcChildWithWindow extends Ipc {
418
+ class IpcChildWithWindow extends Ipc {
356
419
  getData(event) {
357
420
  return getData$1(event);
358
421
  }
359
422
  send(message) {
360
423
  this._rawIpc.postMessage(message);
361
424
  }
362
- sendAndTransfer(message, transfer) {
425
+ sendAndTransfer(message) {
426
+ const transfer = getTransferrables(message);
363
427
  this._rawIpc.postMessage(message, location.origin, transfer);
364
428
  }
365
429
  dispose() {
@@ -381,43 +445,37 @@ let IpcChildWithWindow$1 = class IpcChildWithWindow extends Ipc {
381
445
  };
382
446
  this._rawIpc.addEventListener('message', wrapped);
383
447
  }
384
- };
448
+ }
385
449
  const wrap$4 = window => {
386
- return new IpcChildWithWindow$1(window);
450
+ return new IpcChildWithWindow(window);
387
451
  };
388
452
 
389
- const IpcChildWithWindow$2 = {
453
+ const IpcChildWithWindow$1 = {
390
454
  __proto__: null,
391
455
  listen: listen$2,
392
456
  signal: signal$2,
393
457
  wrap: wrap$4
394
458
  };
395
459
 
396
- const isTransferrable = value => {
397
- return value instanceof MessagePort;
398
- };
399
-
400
- const walkValue = (value, transferrables) => {
460
+ const removeValues = (value, toRemove) => {
401
461
  if (!value) {
402
462
  return value;
403
463
  }
404
- if (isTransferrable(value)) {
405
- transferrables.push(value);
406
- return undefined;
407
- }
408
464
  if (Array.isArray(value)) {
409
465
  const newItems = [];
410
466
  for (const item of value) {
411
- const newItem = walkValue(item, transferrables);
412
- newItems.push(newItem);
467
+ if (!toRemove.includes(item)) {
468
+ newItems.push(removeValues(item, toRemove));
469
+ }
413
470
  }
414
471
  return newItems;
415
472
  }
416
473
  if (typeof value === 'object') {
417
474
  const newObject = Object.create(null);
418
475
  for (const [key, property] of Object.entries(value)) {
419
- const newValue = walkValue(property, transferrables);
420
- newObject[key] = newValue;
476
+ if (!toRemove.includes(property)) {
477
+ newObject[key] = removeValues(property, toRemove);
478
+ }
421
479
  }
422
480
  return newObject;
423
481
  }
@@ -428,8 +486,8 @@ const walkValue = (value, transferrables) => {
428
486
  // as parameters. If the transferrable object is a parameter, in electron
429
487
  // only an empty objected is received in the main process
430
488
  const fixElectronParameters = value => {
431
- const transfer = [];
432
- const newValue = walkValue(value, transfer);
489
+ const transfer = getTransferrables(value);
490
+ const newValue = removeValues(value, transfer);
433
491
  return {
434
492
  newValue,
435
493
  transfer
@@ -442,14 +500,14 @@ const listen$1 = () => {
442
500
  const signal$1 = global => {
443
501
  global.postMessage(readyMessage);
444
502
  };
445
- class IpcChildWithWindow extends Ipc {
503
+ class IpcChildWithElectronWindow extends Ipc {
446
504
  getData(event) {
447
505
  return getData$1(event);
448
506
  }
449
507
  send(message) {
450
508
  this._rawIpc.postMessage(message);
451
509
  }
452
- sendAndTransfer(message, _transfer) {
510
+ sendAndTransfer(message) {
453
511
  const {
454
512
  newValue,
455
513
  transfer
@@ -477,10 +535,10 @@ class IpcChildWithWindow extends Ipc {
477
535
  }
478
536
  }
479
537
  const wrap$3 = window => {
480
- return new IpcChildWithWindow(window);
538
+ return new IpcChildWithElectronWindow(window);
481
539
  };
482
540
 
483
- const IpcChildWithElectronWindow = {
541
+ const IpcChildWithElectronWindow$1 = {
484
542
  __proto__: null,
485
543
  listen: listen$1,
486
544
  signal: signal$1,
@@ -505,7 +563,8 @@ class IpcChildWithMessagePort extends Ipc {
505
563
  send(message) {
506
564
  this._rawIpc.postMessage(message);
507
565
  }
508
- sendAndTransfer(message, transfer) {
566
+ sendAndTransfer(message) {
567
+ const transfer = getTransferrables(message);
509
568
  this._rawIpc.postMessage(message, transfer);
510
569
  }
511
570
  dispose() {
@@ -657,7 +716,8 @@ class IpcParentWithModuleWorker extends Ipc {
657
716
  send(message) {
658
717
  this._rawIpc.postMessage(message);
659
718
  }
660
- sendAndTransfer(message, transfer) {
719
+ sendAndTransfer(message) {
720
+ const transfer = getTransferrables(message);
661
721
  this._rawIpc.postMessage(message, transfer);
662
722
  }
663
723
  dispose() {
@@ -721,7 +781,7 @@ class IpcParentWithWebSocket extends Ipc {
721
781
  send(message) {
722
782
  this._rawIpc.send(stringifyCompact(message));
723
783
  }
724
- sendAndTransfer(message, transfer) {
784
+ sendAndTransfer(message) {
725
785
  throw new Error('sendAndTransfer not supported');
726
786
  }
727
787
  dispose() {
@@ -744,4 +804,4 @@ const IpcParentWithWebSocket$1 = {
744
804
  wrap
745
805
  };
746
806
 
747
- export { IpcChildWithElectronWindow, IpcChildWithMessagePort$1 as IpcChildWithMessagePort, IpcChildWithModuleWorker$1 as IpcChildWithModuleWorker, IpcChildWithModuleWorkerAndMessagePort$1 as IpcChildWithModuleWorkerAndMessagePort, IpcChildWithWindow$2 as IpcChildWithWindow, IpcParentWithModuleWorker$1 as IpcParentWithModuleWorker, IpcParentWithWebSocket$1 as IpcParentWithWebSocket };
807
+ export { IpcChildWithElectronWindow$1 as IpcChildWithElectronWindow, IpcChildWithMessagePort$1 as IpcChildWithMessagePort, IpcChildWithModuleWorker$1 as IpcChildWithModuleWorker, IpcChildWithModuleWorkerAndMessagePort$1 as IpcChildWithModuleWorkerAndMessagePort, IpcChildWithWindow$1 as IpcChildWithWindow, IpcParentWithModuleWorker$1 as IpcParentWithModuleWorker, IpcParentWithWebSocket$1 as IpcParentWithWebSocket };
package/dist/electron.js CHANGED
@@ -26,12 +26,6 @@ const getType = value => {
26
26
  return 'unknown';
27
27
  }
28
28
  };
29
- const array = value => {
30
- const type = getType(value);
31
- if (type !== 'array') {
32
- throw new AssertionError('expected value to be of type array');
33
- }
34
- };
35
29
  const string = value => {
36
30
  const type = getType(value);
37
31
  if (type !== 'string') {
@@ -346,6 +340,67 @@ class IpcError extends VError {
346
340
  }
347
341
  }
348
342
 
343
+ const isMessagePort = value => {
344
+ return value && value instanceof MessagePort;
345
+ };
346
+
347
+ const isMessagePortMain = value => {
348
+ return value && value.constructor && value.constructor.name === 'MessagePortMain';
349
+ };
350
+
351
+ const isOffscreenCanvas = value => {
352
+ return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
353
+ };
354
+
355
+ const isInstanceOf = (value, constructorName) => {
356
+ return value?.constructor?.name === constructorName;
357
+ };
358
+
359
+ const isSocket = value => {
360
+ return isInstanceOf(value, 'Socket');
361
+ };
362
+
363
+ const transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
364
+
365
+ const isTransferrable = value => {
366
+ for (const fn of transferrables) {
367
+ if (fn(value)) {
368
+ return true;
369
+ }
370
+ }
371
+ return false;
372
+ };
373
+
374
+ const walkValue = (value, transferrables) => {
375
+ if (!value) {
376
+ return value;
377
+ }
378
+ if (isTransferrable(value)) {
379
+ transferrables.push(value);
380
+ return;
381
+ }
382
+ if (Array.isArray(value)) {
383
+ for (const item of value) {
384
+ walkValue(item, transferrables);
385
+ }
386
+ return;
387
+ }
388
+ if (typeof value === 'object') {
389
+ const newObject = Object.create(null);
390
+ for (const property of Object.values(value)) {
391
+ walkValue(property, transferrables);
392
+ }
393
+ return newObject;
394
+ }
395
+ return value;
396
+ };
397
+
398
+ const getTransferrables = value => {
399
+ const transferrables = [];
400
+ walkValue(value, transferrables);
401
+ return transferrables;
402
+ };
403
+
349
404
  // @ts-ignore
350
405
  const create$2 = async ({
351
406
  path,
@@ -393,7 +448,8 @@ class IpcParentWithElectronUtilityProcess extends Ipc {
393
448
  send(message) {
394
449
  this._rawIpc.postMessage(message);
395
450
  }
396
- sendAndTransfer(message, transfer) {
451
+ sendAndTransfer(message) {
452
+ const transfer = getTransferrables(message);
397
453
  this._rawIpc.postMessage(message, transfer);
398
454
  }
399
455
  dispose() {
@@ -566,7 +622,8 @@ class IpcParentWithNodeForkedProcess extends Ipc {
566
622
  send(message) {
567
623
  this._rawIpc.send(message);
568
624
  }
569
- sendAndTransfer(message, transfer) {
625
+ sendAndTransfer(message) {
626
+ const transfer = getTransferrables(message);
570
627
  this._rawIpc.send(message, transfer);
571
628
  }
572
629
  dispose() {
@@ -697,8 +754,8 @@ const wrap = worker => {
697
754
  this.worker.postMessage(message);
698
755
  },
699
756
  // @ts-ignore
700
- sendAndTransfer(message, transfer) {
701
- array(transfer);
757
+ sendAndTransfer(message) {
758
+ const transfer = getTransferrables(message);
702
759
  this.worker.postMessage(message, transfer);
703
760
  },
704
761
  dispose() {
package/dist/index.js CHANGED
@@ -1,5 +1,103 @@
1
1
  import { VError } from '@lvce-editor/verror';
2
- import { string, array } from '@lvce-editor/assert';
2
+ import { string } from '@lvce-editor/assert';
3
+
4
+ const isMessagePort = value => {
5
+ return value && value instanceof MessagePort;
6
+ };
7
+
8
+ const isMessagePortMain = value => {
9
+ return value && value.constructor && value.constructor.name === 'MessagePortMain';
10
+ };
11
+
12
+ const isOffscreenCanvas = value => {
13
+ return typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas;
14
+ };
15
+
16
+ const isInstanceOf = (value, constructorName) => {
17
+ return value?.constructor?.name === constructorName;
18
+ };
19
+
20
+ const isSocket = value => {
21
+ return isInstanceOf(value, 'Socket');
22
+ };
23
+
24
+ const transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
25
+
26
+ const isTransferrable = value => {
27
+ for (const fn of transferrables) {
28
+ if (fn(value)) {
29
+ return true;
30
+ }
31
+ }
32
+ return false;
33
+ };
34
+
35
+ const walkValue = (value, transferrables) => {
36
+ if (!value) {
37
+ return value;
38
+ }
39
+ if (isTransferrable(value)) {
40
+ transferrables.push(value);
41
+ return;
42
+ }
43
+ if (Array.isArray(value)) {
44
+ for (const item of value) {
45
+ walkValue(item, transferrables);
46
+ }
47
+ return;
48
+ }
49
+ if (typeof value === 'object') {
50
+ const newObject = Object.create(null);
51
+ for (const property of Object.values(value)) {
52
+ walkValue(property, transferrables);
53
+ }
54
+ return newObject;
55
+ }
56
+ return value;
57
+ };
58
+
59
+ const getTransferrables = value => {
60
+ const transferrables = [];
61
+ walkValue(value, transferrables);
62
+ return transferrables;
63
+ };
64
+
65
+ const removeValues = (value, toRemove) => {
66
+ if (!value) {
67
+ return value;
68
+ }
69
+ if (Array.isArray(value)) {
70
+ const newItems = [];
71
+ for (const item of value) {
72
+ if (!toRemove.includes(item)) {
73
+ newItems.push(removeValues(item, toRemove));
74
+ }
75
+ }
76
+ return newItems;
77
+ }
78
+ if (typeof value === 'object') {
79
+ const newObject = Object.create(null);
80
+ for (const [key, property] of Object.entries(value)) {
81
+ if (!toRemove.includes(property)) {
82
+ newObject[key] = removeValues(property, toRemove);
83
+ }
84
+ }
85
+ return newObject;
86
+ }
87
+ return value;
88
+ };
89
+
90
+ // workaround for electron not supporting transferrable objects
91
+ // as parameters. If the transferrable object is a parameter, in electron
92
+ // only an empty objected is received in the main process
93
+ const fixElectronParameters = value => {
94
+ const transfer = getTransferrables(value);
95
+ const newValue = removeValues(value, transfer);
96
+ return {
97
+ newValue,
98
+ transfer
99
+ };
100
+ };
3
101
 
4
102
  const attachEvents = that => {
5
103
  const handleMessage = (...args) => {
@@ -168,10 +266,6 @@ class IpcError extends VError {
168
266
  }
169
267
  }
170
268
 
171
- const isMessagePortMain = value => {
172
- return value && value.constructor && value.constructor.name === 'MessagePortMain';
173
- };
174
-
175
269
  const listen$8 = ({
176
270
  messagePort
177
271
  }) => {
@@ -206,8 +300,12 @@ class IpcChildWithElectronMessagePort extends Ipc {
206
300
  send(message) {
207
301
  this._rawIpc.postMessage(message);
208
302
  }
209
- sendAndTransfer(message, transfer) {
210
- this._rawIpc.postMessage(message, transfer);
303
+ sendAndTransfer(message) {
304
+ const {
305
+ newValue,
306
+ transfer
307
+ } = fixElectronParameters(message);
308
+ this._rawIpc.postMessage(newValue, transfer);
211
309
  }
212
310
  dispose() {
213
311
  this._rawIpc.close();
@@ -267,8 +365,12 @@ class IpcChildWithElectronUtilityProcess extends Ipc {
267
365
  send(message) {
268
366
  this._rawIpc.postMessage(message);
269
367
  }
270
- sendAndTransfer(message, transfer) {
271
- this._rawIpc.postMessage(message, transfer);
368
+ sendAndTransfer(message) {
369
+ const {
370
+ newValue,
371
+ transfer
372
+ } = fixElectronParameters(message);
373
+ this._rawIpc.postMessage(newValue, transfer);
272
374
  }
273
375
  dispose() {
274
376
  this._rawIpc.close();
@@ -313,7 +415,8 @@ class IpcChildWithModuleWorker extends Ipc {
313
415
  // @ts-ignore
314
416
  this._rawIpc.postMessage(message);
315
417
  }
316
- sendAndTransfer(message, transfer) {
418
+ sendAndTransfer(message) {
419
+ const transfer = getTransferrables(message);
317
420
  // @ts-ignore
318
421
  this._rawIpc.postMessage(message, transfer);
319
422
  }
@@ -388,7 +491,8 @@ class IpcChildWithModuleWorkerAndMessagePort extends Ipc {
388
491
  send(message) {
389
492
  this._rawIpc.postMessage(message);
390
493
  }
391
- sendAndTransfer(message, transfer) {
494
+ sendAndTransfer(message) {
495
+ const transfer = getTransferrables(message);
392
496
  this._rawIpc.postMessage(message, transfer);
393
497
  }
394
498
  dispose() {
@@ -448,7 +552,8 @@ class IpcChildWithNodeForkedProcess extends Ipc {
448
552
  onMessage(callback) {
449
553
  this._rawIpc.on('message', callback);
450
554
  }
451
- sendAndTransfer(message, transfer) {
555
+ sendAndTransfer(message) {
556
+ const transfer = getTransferrables(message);
452
557
  this._rawIpc.send(message, transfer);
453
558
  }
454
559
  dispose() {
@@ -466,10 +571,6 @@ const IpcChildWithNodeForkedProcess$1 = {
466
571
  wrap: wrap$7
467
572
  };
468
573
 
469
- const isMessagePort = value => {
470
- return value && value instanceof MessagePort;
471
- };
472
-
473
574
  const listen$3 = async ({
474
575
  messagePort
475
576
  }) => {
@@ -584,7 +685,8 @@ class IpcChildWithRendererProcess2 extends Ipc {
584
685
  send(message) {
585
686
  this._rawIpc.postMessage(preloadChannelType, message);
586
687
  }
587
- sendAndTransfer(message, transfer) {
688
+ sendAndTransfer(message) {
689
+ const transfer = getTransferrables(message);
588
690
  this._rawIpc.postMessage(preloadChannelType, message, transfer);
589
691
  }
590
692
  dispose() {
@@ -904,7 +1006,8 @@ class IpcParentWithElectronUtilityProcess extends Ipc {
904
1006
  send(message) {
905
1007
  this._rawIpc.postMessage(message);
906
1008
  }
907
- sendAndTransfer(message, transfer) {
1009
+ sendAndTransfer(message) {
1010
+ const transfer = getTransferrables(message);
908
1011
  this._rawIpc.postMessage(message, transfer);
909
1012
  }
910
1013
  dispose() {
@@ -1077,7 +1180,8 @@ class IpcParentWithNodeForkedProcess extends Ipc {
1077
1180
  send(message) {
1078
1181
  this._rawIpc.send(message);
1079
1182
  }
1080
- sendAndTransfer(message, transfer) {
1183
+ sendAndTransfer(message) {
1184
+ const transfer = getTransferrables(message);
1081
1185
  this._rawIpc.send(message, transfer);
1082
1186
  }
1083
1187
  dispose() {
@@ -1167,8 +1271,8 @@ const wrap = worker => {
1167
1271
  this.worker.postMessage(message);
1168
1272
  },
1169
1273
  // @ts-ignore
1170
- sendAndTransfer(message, transfer) {
1171
- array(transfer);
1274
+ sendAndTransfer(message) {
1275
+ const transfer = getTransferrables(message);
1172
1276
  this.worker.postMessage(message, transfer);
1173
1277
  },
1174
1278
  dispose() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/ipc",
3
- "version": "9.5.0",
3
+ "version": "10.0.0",
4
4
  "description": "Inter Process Communication for Lvce Editor",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",