UNPKG

firecomm

Version:

A complete framework for gRPC-node.js

45 lines (39 loc) 1.82 kB
const grpc = require("grpc"); const basicCallDecorator = require("./callDecorators/basicCallDecorator"); const clientStreamDecorator = require("./callDecorators/clientStreamDecorator"); const serverStreamDecorator = require("./callDecorators/serverStreamDecorator"); const generateMeta = require("../utils/generateMeta"); // function will take in a duplex call constructor, and return a class which extends the class with our own built in methods on top function generateDuplex(ServerDuplexStream) { const ServerDuplexStreamClone = Object.create(ServerDuplexStream); ServerDuplexStreamClone.trailerObject = undefined; ServerDuplexStreamClone.state = null; ServerDuplexStreamClone.throw = function(err) { if (!(err instanceof Error)) { throw new Error( "Please pass your error details as an Error class. Firecomm supports adding additional error metadata in the trailers property using context.setStatus()" ); } err.metadata = generateMeta(this.trailerObject); this.emit("error", err); }; ServerDuplexStreamClone.setStatus = function(trailerObject) { this.trailerObject = trailerObject; }; ServerDuplexStreamClone.sendMeta = function(metaObject) { const metaData = new grpc.Metadata(); const keys = Object.keys(metaObject); for (let i = 0; i < keys.length; i++) { metaData.set(keys[i], metaObject[keys[i]]); } this.sendMetadata(metaData); }; return ServerDuplexStreamClone; } module.exports = function(ServerDuplexStream) { const ServerDuplexStreamClone = Object.create(ServerDuplexStream); basicCallDecorator(ServerDuplexStreamClone, ServerDuplexStream); clientStreamDecorator(ServerDuplexStreamClone, ServerDuplexStream); serverStreamDecorator(ServerDuplexStream, ServerDuplexStream); return ServerDuplexStreamClone; };