fix(tsconnect): address bridge review findings
Co-Authored-By: gpt-5.6-sol <noreply@openai.com>
This commit is contained in:
+27
-19
@@ -138,7 +138,7 @@ func (fs *jsFileSystemForRemote) ServeHTTPWithPerms(
|
||||
readBodyChunk := js.FuncOf(func(_ js.Value, _ []js.Value) any {
|
||||
if !response.isLive() {
|
||||
return makePromise(func() (any, error) {
|
||||
return nil, errors.New("drive request is closed")
|
||||
return js.Null(), nil
|
||||
})
|
||||
}
|
||||
return makePromise(func() (any, error) {
|
||||
@@ -176,26 +176,35 @@ func (fs *jsFileSystemForRemote) ServeHTTPWithPerms(
|
||||
}
|
||||
return nil
|
||||
})
|
||||
rejected := js.FuncOf(func(_ js.Value, args []js.Value) any {
|
||||
var fulfilled, rejected js.Func
|
||||
var handlerSettled sync.Once
|
||||
settleHandler := func(err error) {
|
||||
handlerSettled.Do(func() {
|
||||
select {
|
||||
case response.doneCh <- err:
|
||||
default:
|
||||
}
|
||||
readBodyChunk.Release()
|
||||
writeHead.Release()
|
||||
write.Release()
|
||||
end.Release()
|
||||
fulfilled.Release()
|
||||
rejected.Release()
|
||||
})
|
||||
}
|
||||
fulfilled = js.FuncOf(func(_ js.Value, _ []js.Value) any {
|
||||
settleHandler(nil)
|
||||
return nil
|
||||
})
|
||||
rejected = js.FuncOf(func(_ js.Value, args []js.Value) any {
|
||||
err := errors.New("JavaScript drive handler rejected")
|
||||
if len(args) > 0 && args[0].Type() == js.TypeString {
|
||||
err = fmt.Errorf("JavaScript drive handler rejected: %s", args[0].String())
|
||||
}
|
||||
select {
|
||||
case response.doneCh <- err:
|
||||
default:
|
||||
}
|
||||
settleHandler(err)
|
||||
return nil
|
||||
})
|
||||
|
||||
defer func() {
|
||||
readBodyChunk.Release()
|
||||
writeHead.Release()
|
||||
write.Release()
|
||||
end.Release()
|
||||
rejected.Release()
|
||||
}()
|
||||
|
||||
jsReq := map[string]any{
|
||||
"method": r.Method,
|
||||
"path": r.URL.Path,
|
||||
@@ -214,14 +223,13 @@ func (fs *jsFileSystemForRemote) ServeHTTPWithPerms(
|
||||
if hasThen, err := hasJSFunctionProperty(result, "then"); err != nil {
|
||||
handlerErr = err
|
||||
} else if hasThen {
|
||||
_, handlerErr = callJSMethod(result, "then", js.Undefined(), rejected)
|
||||
_, handlerErr = callJSMethod(result, "then", fulfilled, rejected)
|
||||
} else {
|
||||
settleHandler(nil)
|
||||
}
|
||||
}
|
||||
if handlerErr != nil {
|
||||
select {
|
||||
case response.doneCh <- handlerErr:
|
||||
default:
|
||||
}
|
||||
settleHandler(handlerErr)
|
||||
}
|
||||
|
||||
var resultErr error
|
||||
|
||||
Reference in New Issue
Block a user