UNPKG

@jsonjoy.com/reactive-rpc

Version:

Reactive-RPC is a library for building reactive APIs over WebSocket, HTTP, and other RPCs.

228 lines 7.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResponseUnsubscribeMessage = exports.ResponseErrorMessage = exports.ResponseDataMessage = exports.ResponseCompleteMessage = exports.RequestUnsubscribeMessage = exports.RequestErrorMessage = exports.RequestCompleteMessage = exports.RequestDataMessage = exports.NotificationMessage = void 0; const constants_1 = require("../codec/binary/constants"); const constants_2 = require("../codec/compact/constants"); const validation_1 = require("../rpc/validation"); const encodeHeader = (writer, typeU16, id, payloadSize, start) => { if (payloadSize <= 4095) { const w1 = typeU16 | payloadSize; const w2 = id; writer.view.setUint32(start, (w1 << 16) | w2); } else if (payloadSize <= 524287) { writer.u8(id & 0xff); const w1 = typeU16 | 4096 | (payloadSize >> 7); const w2 = ((payloadSize & 127) << 8) | (id >> 8); writer.view.setUint32(start, (w1 << 16) | w2); } else { writer.u16(id); const w1 = typeU16 | 4096 | (payloadSize >> 15); const w2 = 32768 | (payloadSize & 32767); writer.view.setUint32(start, (w1 << 16) | w2); } }; const encodeBinaryWithNameAndPayload = (codec, typeU16, id, name, value) => { const writer = codec.encoder.writer; const nameLength = name.length; writer.ensureCapacity(5 + nameLength); writer.uint8[writer.x + 4] = nameLength; writer.x += 5; writer.ascii(name); const x0 = writer.x0; const x = writer.x; if (value) value.encode(codec); const shift = writer.x0 - x0; const payloadStart = x + shift; const start = payloadStart - 5 - nameLength; const payloadSize = writer.x - payloadStart; encodeHeader(writer, typeU16, id, payloadSize, start); }; const encodeBinaryWithPayload = (codec, typeU16, id, value) => { const writer = codec.encoder.writer; writer.move(4); const x0 = writer.x0; const x = writer.x; if (value) { value.encode(codec); } const shift = writer.x0 - x0; const payloadStart = x + shift; const start = payloadStart - 4; const payloadSize = writer.x - payloadStart; encodeHeader(writer, typeU16, id, payloadSize, start); }; class NotificationMessage { constructor(method, value) { this.method = method; this.value = value; } validate() { (0, validation_1.validateMethod)(this.method); } toCompact() { return this.value === undefined ? [constants_2.CompactMessageType.Notification, this.method] : [constants_2.CompactMessageType.Notification, this.method, this.value.data]; } encodeBinary(codec) { const writer = codec.encoder.writer; const name = this.method; const nameLength = name.length; writer.move(4); writer.ascii(name); const x0 = writer.x0; const x = writer.x; this.value.encode(codec); const shift = writer.x0 - x0; const payloadStart = x + shift; const start = payloadStart - 4 - nameLength; const payloadSize = writer.x - payloadStart; writer.view.setUint32(start, (payloadSize << 8) + nameLength); } } exports.NotificationMessage = NotificationMessage; class RequestDataMessage { constructor(id, method, value) { this.id = id; this.method = method; this.value = value; } validate() { (0, validation_1.validateId)(this.id); if (this.method) (0, validation_1.validateMethod)(this.method); } toCompact() { return this.value === undefined ? [constants_2.CompactMessageType.RequestData, this.id, this.method] : [constants_2.CompactMessageType.RequestData, this.id, this.method, this.value.data]; } encodeBinary(codec) { encodeBinaryWithNameAndPayload(codec, constants_1.BinaryMessageType.RequestData << 13, this.id, this.method, this.value); } } exports.RequestDataMessage = RequestDataMessage; class RequestCompleteMessage { constructor(id, method, value) { this.id = id; this.method = method; this.value = value; } validate() { (0, validation_1.validateId)(this.id); if (this.method) (0, validation_1.validateMethod)(this.method); } toCompact() { return this.value === undefined ? [constants_2.CompactMessageType.RequestComplete, this.id, this.method] : [constants_2.CompactMessageType.RequestComplete, this.id, this.method, this.value.data]; } encodeBinary(codec) { encodeBinaryWithNameAndPayload(codec, constants_1.BinaryMessageType.RequestComplete << 13, this.id, this.method, this.value); } } exports.RequestCompleteMessage = RequestCompleteMessage; class RequestErrorMessage { constructor(id, method, value) { this.id = id; this.method = method; this.value = value; } validate() { (0, validation_1.validateId)(this.id); if (this.method) (0, validation_1.validateMethod)(this.method); } toCompact() { return [constants_2.CompactMessageType.RequestError, this.id, this.method, this.value.data]; } encodeBinary(codec) { encodeBinaryWithNameAndPayload(codec, constants_1.BinaryMessageType.RequestError << 13, this.id, this.method, this.value); } } exports.RequestErrorMessage = RequestErrorMessage; class RequestUnsubscribeMessage { constructor(id) { this.id = id; } validate() { (0, validation_1.validateId)(this.id); } toCompact() { return [constants_2.CompactMessageType.RequestUnsubscribe, this.id]; } encodeBinary(codec) { codec.encoder.writer.u32(3758096384 | this.id); } } exports.RequestUnsubscribeMessage = RequestUnsubscribeMessage; class ResponseCompleteMessage { constructor(id, value) { this.id = id; this.value = value; } validate() { (0, validation_1.validateId)(this.id); } toCompact() { return this.value === undefined ? [constants_2.CompactMessageType.ResponseComplete, this.id] : [constants_2.CompactMessageType.ResponseComplete, this.id, this.value.data]; } encodeBinary(codec) { encodeBinaryWithPayload(codec, constants_1.BinaryMessageType.ResponseComplete << 13, this.id, this.value); } } exports.ResponseCompleteMessage = ResponseCompleteMessage; class ResponseDataMessage { constructor(id, value) { this.id = id; this.value = value; } validate() { (0, validation_1.validateId)(this.id); } toCompact() { return [constants_2.CompactMessageType.ResponseData, this.id, this.value.data]; } encodeBinary(codec) { encodeBinaryWithPayload(codec, constants_1.BinaryMessageType.ResponseData << 13, this.id, this.value); } } exports.ResponseDataMessage = ResponseDataMessage; class ResponseErrorMessage { constructor(id, value) { this.id = id; this.value = value; } validate() { (0, validation_1.validateId)(this.id); } toCompact() { return [constants_2.CompactMessageType.ResponseError, this.id, this.value.data]; } encodeBinary(codec) { encodeBinaryWithPayload(codec, constants_1.BinaryMessageType.ResponseError << 13, this.id, this.value); } } exports.ResponseErrorMessage = ResponseErrorMessage; class ResponseUnsubscribeMessage { constructor(id) { this.id = id; } validate() { (0, validation_1.validateId)(this.id); } toCompact() { return [constants_2.CompactMessageType.ResponseUnsubscribe, this.id]; } encodeBinary(codec) { codec.encoder.writer.u32(3758161920 | this.id); } } exports.ResponseUnsubscribeMessage = ResponseUnsubscribeMessage; //# sourceMappingURL=messages.js.map