@@ -1772,43 +1772,33 @@ export function findIPCMessageTransfers (transfers, object) {
17721772 object [ i ] = findIPCMessageTransfers ( transfers , object [ i ] )
17731773 }
17741774 } else if ( object && typeof object === 'object' ) {
1775- if (
1776- object instanceof MessagePort || (
1777- typeof object . postMessage === 'function' &&
1778- Object . getPrototypeOf ( object ) . constructor . name === 'MessagePort'
1779- )
1780- ) {
1781- const port = IPCMessagePort . create ( object )
1782- object . addEventListener ( 'message' , function onMessage ( event ) {
1783- if ( port . closed === true ) {
1784- port . onmessage = null
1785- event . preventDefault ( )
1786- event . stopImmediatePropagation ( )
1787- object . removeEventListener ( 'message' , onMessage )
1788- return false
1789- }
1790-
1791- port . dispatchEvent ( new MessageEvent ( 'message' , event ) )
1792- } )
1793-
1775+ if ( object instanceof MessagePort ) {
1776+ if ( object instanceof IPCMessagePort ) {
1777+ const port = IPCMessagePort . create ( object )
1778+ ports . get ( port . id ) . channel . onmessage = ( event ) => {
1779+ if ( port . closed === true ) {
1780+ port . onmessage = null
1781+ event . preventDefault ( )
1782+ event . stopImmediatePropagation ( )
1783+ return false
1784+ }
17941785
1795- port . onmessage = ( event ) => {
1796- if ( port . closed === true ) {
1797- port . onmessage = null
1798- event . preventDefault ( )
1799- event . stopImmediatePropagation ( )
1800- return false
1786+ if ( port . started && event . data ?. token !== port . token ) {
1787+ console . log ( event . data )
1788+ const transfers = new Set ( )
1789+ findIPCMessageTransfers ( transfers , event . data )
1790+ object . postMessage ( event . data , {
1791+ transfer : Array . from ( transfers )
1792+ } )
1793+ }
18011794 }
1802-
1803- const transfers = new Set ( )
1804- findIPCMessageTransfers ( transfers , event . data )
1805- object . postMessage ( event . data , {
1806- transfer : Array . from ( transfers )
1807- } )
1795+ add ( port )
1796+ return port
1797+ } else {
1798+ add ( object )
1799+ return object
18081800 }
1809- add ( port )
1810- return port
1811- } else {
1801+ } else if ( Object . getPrototypeOf ( object ) === Object . prototype ) {
18121802 for ( const key in object ) {
18131803 object [ key ] = findIPCMessageTransfers (
18141804 transfers ,
@@ -1841,13 +1831,15 @@ export class IPCMessagePort extends MessagePort {
18411831 static create ( options = null ) {
18421832 const id = String ( options ?. id ?? rand64 ( ) )
18431833 const port = Object . create ( this . prototype )
1844- const token = String ( rand64 ( ) )
1845- const channel = typeof options ?. channel === 'string'
1846- ? new BroadcastChannel ( options . channel )
1847- : (
1848- ( options ?. channel && new BroadcastChannel ( options . channel . name , options . channel ) ) ??
1849- new BroadcastChannel ( id )
1850- )
1834+ const token = ports . get ( id ) ?. token || String ( rand64 ( ) )
1835+ const channel = ports . get ( id ) ?. channel ||
1836+ ( typeof options ?. channel === 'string'
1837+ ? new BroadcastChannel ( options . channel )
1838+ : (
1839+ ( options ?. channel && new BroadcastChannel ( options . channel . name , options . channel ) ) ??
1840+ new BroadcastChannel ( id )
1841+ )
1842+ )
18511843
18521844 if ( ports . has ( id ) ) {
18531845 ports . get ( id ) . closed = true
@@ -1868,8 +1860,8 @@ export class IPCMessagePort extends MessagePort {
18681860 eventTarget : { writable : true , value : ports . get ( id ) ?. eventTarget || new EventTarget ( ) }
18691861 } ) )
18701862
1871- const state = ports . get ( id )
18721863 channel . onmessage = function onMessage ( event ) {
1864+ const state = ports . get ( id )
18731865 if ( ! state || state ?. closed === true ) {
18741866 event . preventDefault ( )
18751867 event . stopImmediatePropagation ( )
@@ -2051,10 +2043,9 @@ export class IPCMessagePort extends MessagePort {
20512043 }
20522044
20532045 [ Symbol . for ( 'socket.runtime.serialize' ) ] ( ) {
2054- const channel = ports . get ( this . id ) ?. channel
20552046 return {
20562047 __type__ : 'IPCMessagePort' ,
2057- channel : channel ? { name : channel . name , origin : channel . origin || location . origin } : null ,
2048+ channel : ports . get ( this . id ) ?. channel ? .name ?? null ,
20582049 id : this . id
20592050 }
20602051 }
0 commit comments