@@ -25,7 +25,7 @@ export { Endpoint };
2525export const proxyMarker = Symbol ( "Comlink.proxy" ) ;
2626export const createEndpoint = Symbol ( "Comlink.endpoint" ) ;
2727export const releaseProxy = Symbol ( "Comlink.releaseProxy" ) ;
28- const throwSet = new WeakSet ( ) ;
28+ const throwMarker = Symbol ( "Comlink.thrown" ) ;
2929
3030/**
3131 * Interface of values that were marked to be proxied with `comlink.proxy()`.
@@ -201,24 +201,23 @@ export const transferHandlers = new Map<string, TransferHandler>([
201201 [
202202 "throw" ,
203203 {
204- canHandle : obj => throwSet . has ( obj ) ,
205- serialize ( obj ) {
206- const isError = obj instanceof Error ;
207- let serialized = obj ;
204+ canHandle : obj => typeof obj === "object" && throwMarker in obj ,
205+ serialize ( { value } ) {
206+ const isError = value instanceof Error ;
207+ let serialized = { isError , value } ;
208208 if ( isError ) {
209- serialized = {
210- isError,
211- message : obj . message ,
212- stack : obj . stack
209+ serialized . value = {
210+ message : value . message ,
211+ stack : value . stack
213212 } ;
214213 }
215214 return [ serialized , [ ] ] ;
216215 } ,
217- deserialize ( obj ) {
218- if ( ( obj as any ) . isError ) {
219- throw Object . assign ( new Error ( ) , obj ) ;
216+ deserialize ( serialized ) {
217+ if ( serialized . isError ) {
218+ throw Object . assign ( new Error ( ) , serialized . value ) ;
220219 }
221- throw obj ;
220+ throw serialized . value ;
222221 }
223222 }
224223 ]
@@ -274,14 +273,12 @@ export function expose(obj: any, ep: Endpoint = self as any) {
274273 }
275274 break ;
276275 }
277- } catch ( e ) {
278- returnValue = e ;
279- throwSet . add ( e ) ;
276+ } catch ( value ) {
277+ returnValue = { value, [ throwMarker ] : 0 } ;
280278 }
281279 Promise . resolve ( returnValue )
282- . catch ( e => {
283- throwSet . add ( e ) ;
284- return e ;
280+ . catch ( value => {
281+ return { value, [ throwMarker ] : 0 } ;
285282 } )
286283 . then ( returnValue => {
287284 const [ wireValue , transferables ] = toWireValue ( returnValue ) ;
0 commit comments