@@ -10,7 +10,9 @@ if (!global.URL.$$objects) {
1010 global . URL . $$objects [ id ] = blob ;
1111 return `blob:http://localhost/${ id } ` ;
1212 } ;
13+ }
1314
15+ if ( ! global . fetch || ! global . fetch . jsdomWorker ) {
1416 let oldFetch = global . fetch || fetch ;
1517 global . fetch = function ( url , opts ) {
1618 if ( url . match ( / ^ b l o b : / ) ) {
@@ -29,6 +31,7 @@ if (!global.URL.$$objects) {
2931 }
3032 return oldFetch . call ( this , url , opts ) ;
3133 } ;
34+ global . fetch . jsdomWorker = true ;
3235}
3336
3437if ( ! global . document ) {
@@ -46,26 +49,31 @@ if (!global.document.createEvent) {
4649
4750
4851global . Worker = function Worker ( url ) {
49- let messageQueue = [ ] ,
50- inside = mitt ( ) ,
51- outside = mitt ( ) ,
52- scope = {
53- onmessage : null ,
54- dispatchEvent : inside . emit ,
55- addEventListener : inside . on ,
56- removeEventListener : inside . off ,
57- postMessage ( data ) {
58- outside . emit ( 'message' , { data } ) ;
59- } ,
60- fetch : global . fetch ,
61- importScripts ( ) { }
52+ let getScopeVar ;
53+ let messageQueue = [ ] ;
54+ let inside = mitt ( ) ;
55+ let outside = mitt ( ) ;
56+ let scope = {
57+ onmessage : null ,
58+ dispatchEvent : inside . emit ,
59+ addEventListener : inside . on ,
60+ removeEventListener : inside . off ,
61+ postMessage ( data ) {
62+ outside . emit ( 'message' , { data } ) ;
6263 } ,
63- getScopeVar ;
64- inside . on ( 'message' , e => { let f = getScopeVar ( 'onmessage' ) ; if ( f ) f . call ( scope , e ) ; } ) ;
64+ fetch : global . fetch ,
65+ importScripts ( ) { }
66+ } ;
67+ inside . on ( 'message' , e => {
68+ let f = scope . onmessage || getScopeVar ( 'onmessage' ) ;
69+ if ( f ) f . call ( scope , e ) ;
70+ } ) ;
6571 this . addEventListener = outside . on ;
6672 this . removeEventListener = outside . off ;
6773 this . dispatchEvent = outside . emit ;
68- outside . on ( 'message' , e => { this . onmessage && this . onmessage ( e ) ; } ) ;
74+ outside . on ( 'message' , e => {
75+ if ( this . onmessage ) this . onmessage ( e ) ;
76+ } ) ;
6977 this . postMessage = data => {
7078 if ( messageQueue != null ) messageQueue . push ( data ) ;
7179 else inside . emit ( 'message' , { data } ) ;
@@ -74,8 +82,8 @@ global.Worker = function Worker(url) {
7482 throw Error ( 'Not Supported' ) ;
7583 } ;
7684 global . fetch ( url )
77- . then ( r => r . text ( ) )
78- . then ( code => {
85+ . then ( r => r . text ( ) )
86+ . then ( code => {
7987 let vars = 'var self=this,global=self' ;
8088 for ( let k in scope ) vars += `,${ k } =self.${ k } ` ;
8189 getScopeVar = Function (
@@ -85,5 +93,8 @@ global.Worker = function Worker(url) {
8593 messageQueue = null ;
8694 q . forEach ( this . postMessage ) ;
8795 } )
88- . catch ( e => { outside . emit ( 'error' , e ) ; console . error ( e ) ; } ) ;
96+ . catch ( e => {
97+ outside . emit ( 'error' , e ) ;
98+ console . error ( e ) ;
99+ } ) ;
89100} ;
0 commit comments