1- import { MsgPackEncoder } from '@jsonjoy.com/json-pack/lib/msgpack' ;
2- import { CborEncoder } from '@jsonjoy.com/json-pack/lib/cbor/CborEncoder' ;
3- import { JsonEncoder } from '@jsonjoy.com/json-pack/lib/json/JsonEncoder' ;
41import { RpcMessageFormat } from '../constants' ;
52import { RpcError , RpcErrorCodes } from '../../rpc/caller/error' ;
63import * as msg from '../../messages' ;
74import { CompactMessageType } from './constants' ;
85import { RpcValue } from '../../messages/Value' ;
6+ import type { JsonEncoder } from '@jsonjoy.com/json-pack/lib/json/JsonEncoder' ;
97import type { RpcMessageCodec } from '../types' ;
108import type { JsonValueCodec } from '@jsonjoy.com/json-pack/lib/codecs/types' ;
119import type * as types from './types' ;
10+ import type { TlvBinaryJsonEncoder } from '@jsonjoy.com/json-pack' ;
1211
1312const fromJson = ( arr : unknown | unknown [ ] | types . CompactMessage ) : msg . ReactiveRpcMessage => {
1413 if ( ! ( arr instanceof Array ) ) throw RpcError . fromCode ( RpcErrorCodes . BAD_REQUEST ) ;
@@ -57,32 +56,34 @@ const encodeCompactWithNameAndPayload = (
5756 msg : msg . RequestDataMessage | msg . RequestCompleteMessage | msg . RequestErrorMessage ,
5857) => {
5958 const encoder = codec . encoder ;
60- if ( encoder instanceof CborEncoder || encoder instanceof MsgPackEncoder ) {
59+ if ( typeof ( encoder as any as TlvBinaryJsonEncoder ) . writeArrHdr === 'function' ) {
60+ const binaryEncoder = encoder as any as TlvBinaryJsonEncoder ;
6161 const value = msg . value ;
6262 const hasValue = value !== undefined ;
63- encoder . writeArrHdr ( hasValue ? 4 : 3 ) ;
63+ binaryEncoder . writeArrHdr ( hasValue ? 4 : 3 ) ;
6464 encoder . writeUInteger ( type ) ;
6565 encoder . writeUInteger ( msg . id ) ;
6666 encoder . writeAsciiStr ( msg . method ) ;
6767 if ( hasValue ) {
6868 if ( value . type ) value . type . encoder ( codec . format ) ( value . data , encoder ) ;
6969 else encoder . writeAny ( value . data ) ;
7070 }
71- } else if ( encoder instanceof JsonEncoder ) {
71+ } else if ( typeof ( encoder as any as JsonEncoder ) . writeStartArr === 'function' && typeof ( encoder as any as JsonEncoder ) . writeArrSeparator === 'function' ) {
72+ const jsonEncoder = encoder as any as JsonEncoder ;
7273 const value = msg . value ;
73- encoder . writeStartArr ( ) ;
74- encoder . writeNumber ( type ) ;
75- encoder . writeArrSeparator ( ) ;
76- encoder . writeNumber ( msg . id ) ;
77- encoder . writeArrSeparator ( ) ;
78- encoder . writeAsciiStr ( msg . method ) ;
74+ jsonEncoder . writeStartArr ( ) ;
75+ jsonEncoder . writeNumber ( type ) ;
76+ jsonEncoder . writeArrSeparator ( ) ;
77+ jsonEncoder . writeNumber ( msg . id ) ;
78+ jsonEncoder . writeArrSeparator ( ) ;
79+ jsonEncoder . writeAsciiStr ( msg . method ) ;
7980 const hasValue = value !== undefined ;
8081 if ( hasValue ) {
81- encoder . writeArrSeparator ( ) ;
82+ jsonEncoder . writeArrSeparator ( ) ;
8283 if ( value . type ) value . type . encoder ( codec . format ) ( value . data , encoder ) ;
83- else encoder . writeAny ( value . data ) ;
84+ else jsonEncoder . writeAny ( value . data ) ;
8485 }
85- encoder . writeEndArr ( ) ;
86+ jsonEncoder . writeEndArr ( ) ;
8687 } else encoder . writeArr ( msg . toCompact ( ) ) ;
8788} ;
8889
@@ -92,30 +93,32 @@ const encodeCompactWithPayload = (
9293 msg : msg . ResponseCompleteMessage | msg . ResponseDataMessage | msg . ResponseErrorMessage ,
9394) => {
9495 const encoder = codec . encoder ;
95- if ( encoder instanceof CborEncoder || encoder instanceof MsgPackEncoder ) {
96+ if ( typeof ( encoder as any as TlvBinaryJsonEncoder ) . writeArrHdr === 'function' ) {
97+ const binaryEncoder = encoder as any as TlvBinaryJsonEncoder ;
9698 const value = msg . value ;
9799 const hasValue = value !== undefined ;
98- encoder . writeArrHdr ( hasValue ? 3 : 2 ) ;
100+ binaryEncoder . writeArrHdr ( hasValue ? 3 : 2 ) ;
99101 encoder . writeUInteger ( type ) ;
100102 encoder . writeUInteger ( msg . id ) ;
101103 if ( hasValue ) {
102104 if ( value . type ) {
103105 value . type . encoder ( codec . format ) ( value . data , encoder ) ;
104106 } else encoder . writeAny ( value . data ) ;
105107 }
106- } else if ( encoder instanceof JsonEncoder ) {
108+ } else if ( typeof ( encoder as any as JsonEncoder ) . writeStartArr === 'function' && typeof ( encoder as any as JsonEncoder ) . writeArrSeparator === 'function' ) {
109+ const jsonEncoder = encoder as any as JsonEncoder ;
107110 const value = msg . value ;
108- encoder . writeStartArr ( ) ;
109- encoder . writeNumber ( type ) ;
110- encoder . writeArrSeparator ( ) ;
111- encoder . writeNumber ( msg . id ) ;
111+ jsonEncoder . writeStartArr ( ) ;
112+ jsonEncoder . writeNumber ( type ) ;
113+ jsonEncoder . writeArrSeparator ( ) ;
114+ jsonEncoder . writeNumber ( msg . id ) ;
112115 const hasValue = value !== undefined ;
113116 if ( hasValue ) {
114- encoder . writeArrSeparator ( ) ;
115- if ( value . type ) value . type . encoder ( codec . format ) ( value . data , encoder ) ;
117+ jsonEncoder . writeArrSeparator ( ) ;
118+ if ( value . type ) value . type . encoder ( codec . format ) ( value . data , jsonEncoder ) ;
116119 else encoder . writeAny ( value . data ) ;
117120 }
118- encoder . writeEndArr ( ) ;
121+ jsonEncoder . writeEndArr ( ) ;
119122 } else encoder . writeArr ( msg . toCompact ( ) ) ;
120123} ;
121124
@@ -126,29 +129,31 @@ export class CompactRpcMessageCodec implements RpcMessageCodec {
126129 public encodeMessage ( codec : JsonValueCodec , message : msg . ReactiveRpcMessage ) : void {
127130 if ( message instanceof msg . NotificationMessage ) {
128131 const encoder = codec . encoder ;
129- if ( encoder instanceof CborEncoder || encoder instanceof MsgPackEncoder ) {
132+ if ( typeof ( encoder as any as TlvBinaryJsonEncoder ) . writeArrHdr === 'function' ) {
133+ const binaryEncoder = encoder as any as TlvBinaryJsonEncoder ;
130134 const value = message . value ;
131135 const hasValue = value !== undefined ;
132- encoder . writeArrHdr ( hasValue ? 3 : 2 ) ;
136+ binaryEncoder . writeArrHdr ( hasValue ? 3 : 2 ) ;
133137 encoder . writeUInteger ( CompactMessageType . Notification ) ;
134138 encoder . writeAsciiStr ( message . method ) ;
135139 if ( hasValue ) {
136140 if ( value . type ) value . type . encoder ( codec . format ) ( value . data , encoder ) ;
137141 else encoder . writeAny ( value . data ) ;
138142 }
139- } else if ( encoder instanceof JsonEncoder ) {
143+ } else if ( typeof ( encoder as any as JsonEncoder ) . writeStartArr === 'function' && typeof ( encoder as any as JsonEncoder ) . writeArrSeparator === 'function' ) {
144+ const jsonEncoder = encoder as any as JsonEncoder ;
140145 const value = message . value ;
141- encoder . writeStartArr ( ) ;
142- encoder . writeNumber ( CompactMessageType . Notification ) ;
143- encoder . writeArrSeparator ( ) ;
144- encoder . writeAsciiStr ( message . method ) ;
146+ jsonEncoder . writeStartArr ( ) ;
147+ jsonEncoder . writeNumber ( CompactMessageType . Notification ) ;
148+ jsonEncoder . writeArrSeparator ( ) ;
149+ jsonEncoder . writeAsciiStr ( message . method ) ;
145150 const hasValue = value !== undefined ;
146151 if ( hasValue ) {
147- encoder . writeArrSeparator ( ) ;
148- if ( value . type ) value . type . encoder ( codec . format ) ( value . data , encoder ) ;
152+ jsonEncoder . writeArrSeparator ( ) ;
153+ if ( value . type ) value . type . encoder ( codec . format ) ( value . data , jsonEncoder ) ;
149154 else encoder . writeAny ( value . data ) ;
150155 }
151- encoder . writeEndArr ( ) ;
156+ jsonEncoder . writeEndArr ( ) ;
152157 } else encoder . writeArr ( message . toCompact ( ) ) ;
153158 } else if ( message instanceof msg . RequestDataMessage ) {
154159 encodeCompactWithNameAndPayload ( codec , CompactMessageType . RequestData , message ) ;
@@ -173,20 +178,22 @@ export class CompactRpcMessageCodec implements RpcMessageCodec {
173178
174179 public encodeBatch ( jsonCodec : JsonValueCodec , batch : msg . ReactiveRpcMessage [ ] ) : void {
175180 const encoder = jsonCodec . encoder ;
176- if ( encoder instanceof CborEncoder || encoder instanceof MsgPackEncoder ) {
181+ if ( typeof ( encoder as any as TlvBinaryJsonEncoder ) . writeArrHdr === 'function' ) {
182+ const binaryEncoder = encoder as any as TlvBinaryJsonEncoder ;
177183 const length = batch . length ;
178- encoder . writeArrHdr ( length ) ;
184+ binaryEncoder . writeArrHdr ( length ) ;
179185 for ( let i = 0 ; i < length ; i ++ ) this . encodeMessage ( jsonCodec , batch [ i ] ) ;
180- } else if ( encoder instanceof JsonEncoder ) {
186+ } else if ( typeof ( encoder as any as JsonEncoder ) . writeStartArr === 'function' && typeof ( encoder as any as JsonEncoder ) . writeArrSeparator === 'function' ) {
187+ const jsonEncoder = encoder as any as JsonEncoder ;
181188 const length = batch . length ;
182189 const last = length - 1 ;
183- encoder . writeStartArr ( ) ;
190+ jsonEncoder . writeStartArr ( ) ;
184191 for ( let i = 0 ; i < last ; i ++ ) {
185192 this . encodeMessage ( jsonCodec , batch [ i ] ) ;
186- encoder . writeArrSeparator ( ) ;
193+ jsonEncoder . writeArrSeparator ( ) ;
187194 }
188195 if ( length > 0 ) this . encodeMessage ( jsonCodec , batch [ last ] ) ;
189- encoder . writeEndArr ( ) ;
196+ jsonEncoder . writeEndArr ( ) ;
190197 } else {
191198 const jsonMessages : types . CompactMessage [ ] = [ ] ;
192199 const length = batch . length ;
0 commit comments