@@ -4,7 +4,7 @@ import * as loaderRunner from 'loader-runner';
44import  {  Subject ,  from ,  of  }  from  'rxjs' ; 
55import  {  catchError ,  map ,  mergeMap  }  from  'rxjs/operators' ; 
66import  {  enableLoggerGlobal ,  getLogger  }  from  '../utils/logger' ; 
7- import  {  expose ,  proxy  }  from  'comlink' ; 
7+ import  {  expose ,  proxy ,   transfer  }  from  'comlink' ; 
88import  {  parentPort ,  workerData  }  from  'worker_threads' ; 
99
1010import  {  WorkerTaskData  }  from  './WorkerTaskData' ; 
@@ -53,6 +53,17 @@ const buildLoaderOption = (
5353
5454type  TaskQueueContext  =  Omit < WorkerTaskData ,  'id' >  &  {  task : {  id : number ;  logLevel : 'verbose'  |  'info'  }  } ; 
5555
56+ // [todo]: support nested objects 
57+ const  collectBuffer  =  ( result : loaderRunner . RunLoaderResult )  =>  { 
58+   const  ret  =  Object . values ( result ) . reduce ( ( acc ,  value )  =>  { 
59+     if  ( ArrayBuffer . isView ( value ) )  { 
60+       acc . push ( value . buffer ) ; 
61+     } 
62+     return  acc ; 
63+   } ,  [ ] ) ; 
64+   return  ret ; 
65+ } ; 
66+ 
5667/** 
5768 * Interface to allow running specified task in worker threads, 
5869 * exposed via comlink proxy. 
@@ -98,7 +109,12 @@ const taskRunner = (() => {
98109        if  ( err )  { 
99110          onError ( err ) ; 
100111        }  else  { 
101-           onComplete ( result ) ; 
112+           const  buffer  =  collectBuffer ( result ) ; 
113+           if  ( buffer . length  >  0 )  { 
114+             onComplete ( transfer ( result ,  buffer ) ) ; 
115+           }  else  { 
116+             onComplete ( result ) ; 
117+           } 
102118        } 
103119      } , 
104120      ( e )  =>  { 
0 commit comments