Skip to content

Commit c4009d6

Browse files
committed
feat: 🎸 remove static imports of codecs in compact encoder
1 parent fbc135f commit c4009d6

File tree

1 file changed

+48
-41
lines changed

1 file changed

+48
-41
lines changed

src/common/codec/compact/CompactRpcMessageCodec.ts

Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
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';
41
import {RpcMessageFormat} from '../constants';
52
import {RpcError, RpcErrorCodes} from '../../rpc/caller/error';
63
import * as msg from '../../messages';
74
import {CompactMessageType} from './constants';
85
import {RpcValue} from '../../messages/Value';
6+
import type {JsonEncoder} from '@jsonjoy.com/json-pack/lib/json/JsonEncoder';
97
import type {RpcMessageCodec} from '../types';
108
import type {JsonValueCodec} from '@jsonjoy.com/json-pack/lib/codecs/types';
119
import type * as types from './types';
10+
import type {TlvBinaryJsonEncoder} from '@jsonjoy.com/json-pack';
1211

1312
const 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

Comments
 (0)