File tree Expand file tree Collapse file tree 5 files changed +69
-2
lines changed Expand file tree Collapse file tree 5 files changed +69
-2
lines changed Original file line number Diff line number Diff line change @@ -536,6 +536,13 @@ function webMessagePortToNodeMessagePort(port: MessagePort) {
536
536
port . ref = ( ) => {
537
537
port [ refMessagePort ] ( true ) ;
538
538
} ;
539
+ port . once = ( name : string | symbol , listener ) => {
540
+ const fn = ( event ) => {
541
+ port . off ( name , fn ) ;
542
+ return listener ( event ) ;
543
+ } ;
544
+ port . on ( name , fn ) ;
545
+ } ;
539
546
return port ;
540
547
}
541
548
Original file line number Diff line number Diff line change 684
684
" test-whatwg-url-custom-tostringtag.js" ,
685
685
" test-whatwg-url-override-hostname.js" ,
686
686
" test-whatwg-url-properties.js" ,
687
+ " test-worker-message-port-infinite-message-loop.js" ,
688
+ " test-worker-message-port-multiple-sharedarraybuffers.js" ,
687
689
" test-worker-message-port-receive-message.js" ,
688
690
" test-zlib-close-after-error.js" ,
689
691
" test-zlib-close-after-write.js" ,
Original file line number Diff line number Diff line change @@ -2829,13 +2829,11 @@ NOTE: This file should not be manually edited. Please edit `tests/node_compat/co
2829
2829
- [ parallel/test-worker-message-port-close.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-close.js )
2830
2830
- [ parallel/test-worker-message-port-constructor.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-constructor.js )
2831
2831
- [ parallel/test-worker-message-port-drain.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-drain.js )
2832
- - [ parallel/test-worker-message-port-infinite-message-loop.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-infinite-message-loop.js )
2833
2832
- [ parallel/test-worker-message-port-inspect-during-init-hook.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-inspect-during-init-hook.js )
2834
2833
- [ parallel/test-worker-message-port-jstransferable-nested-untransferable.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-jstransferable-nested-untransferable.js )
2835
2834
- [ parallel/test-worker-message-port-message-before-close.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-message-before-close.js )
2836
2835
- [ parallel/test-worker-message-port-message-port-transferring.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-message-port-transferring.js )
2837
2836
- [ parallel/test-worker-message-port-move.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-move.js )
2838
- - [ parallel/test-worker-message-port-multiple-sharedarraybuffers.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-multiple-sharedarraybuffers.js )
2839
2837
- [ parallel/test-worker-message-port-terminate-transfer-list.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-terminate-transfer-list.js )
2840
2838
- [ parallel/test-worker-message-port-transfer-closed.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-transfer-closed.js )
2841
2839
- [ parallel/test-worker-message-port-transfer-duplicate.js] ( https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-worker-message-port-transfer-duplicate.js )
Original file line number Diff line number Diff line change
1
+ // deno-fmt-ignore-file
2
+ // deno-lint-ignore-file
3
+
4
+ // Copyright Joyent and Node contributors. All rights reserved. MIT license.
5
+ // Taken from Node 18.12.1
6
+ // This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
7
+
8
+ 'use strict' ;
9
+ const common = require ( '../common' ) ;
10
+ const assert = require ( 'assert' ) ;
11
+
12
+ const { MessageChannel } = require ( 'worker_threads' ) ;
13
+
14
+ // Make sure that an infinite asynchronous .on('message')/postMessage loop
15
+ // does not lead to a stack overflow and does not starve the event loop.
16
+ // We schedule timeouts both from before the .on('message') handler and
17
+ // inside of it, which both should run.
18
+
19
+ const { port1, port2 } = new MessageChannel ( ) ;
20
+ let count = 0 ;
21
+ port1 . on ( 'message' , ( ) => {
22
+ if ( count === 0 ) {
23
+ setTimeout ( common . mustCall ( ( ) => {
24
+ port1 . close ( ) ;
25
+ } ) , 0 ) ;
26
+ }
27
+
28
+ port2 . postMessage ( 0 ) ;
29
+ assert ( count ++ < 10000 , `hit ${ count } loop iterations` ) ;
30
+ } ) ;
31
+
32
+ port2 . postMessage ( 0 ) ;
33
+
34
+ // This is part of the test -- the event loop should be available and not stall
35
+ // out due to the recursive .postMessage() calls.
36
+ setTimeout ( common . mustCall ( ) , 0 ) ;
Original file line number Diff line number Diff line change
1
+ // deno-fmt-ignore-file
2
+ // deno-lint-ignore-file
3
+
4
+ // Copyright Joyent and Node contributors. All rights reserved. MIT license.
5
+ // Taken from Node 18.12.1
6
+ // This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
7
+
8
+ 'use strict' ;
9
+ const common = require ( '../common' ) ;
10
+ const assert = require ( 'assert' ) ;
11
+ const { MessageChannel } = require ( 'worker_threads' ) ;
12
+
13
+ // Regression test for https://github.com/nodejs/node/issues/28559
14
+
15
+ const obj = [
16
+ [ new SharedArrayBuffer ( 0 ) , new SharedArrayBuffer ( 1 ) ] ,
17
+ [ new SharedArrayBuffer ( 2 ) , new SharedArrayBuffer ( 3 ) ] ,
18
+ ] ;
19
+
20
+ const { port1, port2 } = new MessageChannel ( ) ;
21
+ port1 . once ( 'message' , common . mustCall ( ( message ) => {
22
+ assert . deepStrictEqual ( message , obj ) ;
23
+ } ) ) ;
24
+ port2 . postMessage ( obj ) ;
You can’t perform that action at this time.
0 commit comments