@@ -212,12 +212,13 @@ function decodeJsonRpcRaw(
212212}
213213
214214function decodeJsonRpcMessage ( decoded : JsonRpcMessage ) : RpcMessage . FromClientEncoded | RpcMessage . FromServerEncoded {
215- if ( "method" in decoded ) {
216- if ( Predicate . isNullish ( decoded . id ) && decoded . method . startsWith ( "@effect/rpc/" ) ) {
217- const tag = decoded . method . slice ( "@effect/rpc/" . length ) as
215+ if ( Object . hasOwn ( decoded , "method" ) ) {
216+ const request = decoded as JsonRpcRequest
217+ if ( Predicate . isNullish ( request . id ) && request . method . startsWith ( "@effect/rpc/" ) ) {
218+ const tag = request . method . slice ( "@effect/rpc/" . length ) as
218219 | RpcMessage . FromServerEncoded [ "_tag" ]
219220 | Exclude < RpcMessage . FromClientEncoded [ "_tag" ] , "Request" >
220- const requestId = ( decoded as any ) . params ?. requestId
221+ const requestId = ( request as any ) . params ?. requestId
221222 return requestId ?
222223 {
223224 _tag : tag ,
@@ -227,46 +228,49 @@ function decodeJsonRpcMessage(decoded: JsonRpcMessage): RpcMessage.FromClientEnc
227228 }
228229 return {
229230 _tag : "Request" ,
230- id : decoded . id ?? "" ,
231- tag : decoded . method ,
232- payload : decoded . params ?? null ,
233- headers : decoded . headers ?? [ ] ,
234- ...( decoded . spanId ?
231+ id : request . id ?? "" ,
232+ tag : request . method ,
233+ payload : request . params ?? null ,
234+ headers : request . headers ?? [ ] ,
235+ ...( request . spanId ?
235236 {
236- traceId : decoded . traceId ,
237- spanId : decoded . spanId ! ,
238- sampled : decoded . sampled !
237+ traceId : request . traceId ,
238+ spanId : request . spanId ! ,
239+ sampled : request . sampled !
239240 } :
240241 { } )
241242 }
242- } else if ( decoded . error && decoded . error . _tag === "Defect" ) {
243+ }
244+ const response = decoded as JsonRpcResponse
245+ const hasError = Object . hasOwn ( response , "error" )
246+ if ( hasError && response . error && response . error . _tag === "Defect" ) {
243247 return {
244248 _tag : "Defect" ,
245- defect : decoded . error . data
249+ defect : response . error . data
246250 }
247- } else if ( decoded . chunk === true ) {
251+ } else if ( Object . hasOwn ( response , "chunk" ) && response . chunk === true ) {
248252 return {
249253 _tag : "Chunk" ,
250- requestId : decoded . id ?? "" ,
251- values : decoded . result as any
254+ requestId : response . id ?? "" ,
255+ values : response . result as any
252256 }
253257 }
254258 return {
255259 _tag : "Exit" ,
256- requestId : decoded . id ?? "" ,
257- exit : decoded . error != null ?
260+ requestId : response . id ?? "" ,
261+ exit : hasError && response . error != null ?
258262 {
259263 _tag : "Failure" ,
260- cause : decoded . error . _tag === "Cause" ?
261- decoded . error . data as any :
264+ cause : response . error . _tag === "Cause" ?
265+ response . error . data as any :
262266 [ {
263267 _tag : "Die" ,
264- defect : decoded . error
268+ defect : response . error
265269 } ]
266270 } :
267271 {
268272 _tag : "Success" ,
269- value : decoded . result
273+ value : response . result
270274 }
271275 }
272276}
0 commit comments