1 import RAL from './ral';
2 import { Message } from './messages';
3 import { Event } from './events';
4 import { ContentEncoder, ContentTypeEncoder } from './encoding';
5 /** Writes JSON-RPC messages to an underlying transport. */
6 export interface MessageWriter {
7 /** Raised whenever an error occurs while writing a message. */
8 readonly onError: Event<[Error, Message | undefined, number | undefined]>;
9 /** An event raised when the underlying transport has closed and writing is no longer possible. */
10 readonly onClose: Event<void>;
12 * Sends a JSON-RPC message.
13 * @param msg The JSON-RPC message to be sent.
14 * @description Implementations should guarantee messages are transmitted in the same order that they are received by this method.
16 write(msg: Message): Promise<void>;
18 /** Releases resources incurred from writing or raising events. Does NOT close the underlying transport, if any. */
21 export declare namespace MessageWriter {
22 function is(value: any): value is MessageWriter;
24 export declare abstract class AbstractMessageWriter {
29 get onError(): Event<[Error, Message | undefined, number | undefined]>;
30 protected fireError(error: any, message?: Message, count?: number): void;
31 get onClose(): Event<void>;
32 protected fireClose(): void;
35 export interface MessageWriterOptions {
36 charset?: RAL.MessageBufferEncoding;
37 contentEncoder?: ContentEncoder;
38 contentTypeEncoder?: ContentTypeEncoder;
40 export declare class WriteableStreamMessageWriter extends AbstractMessageWriter implements MessageWriter {
44 private writeSemaphore;
45 constructor(writable: RAL.WritableStream, options?: RAL.MessageBufferEncoding | MessageWriterOptions);
46 write(msg: Message): Promise<void>;