UNPKG

nestjs-protobuf-es

Version:

Protobuf-ES integration for NestJS

44 lines (43 loc) 1.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateGrpcServices = generateGrpcServices; const protobuf_1 = require("@bufbuild/protobuf"); const transformers_1 = require("./transformers"); /** * Generates grpc service definitions. */ function generateGrpcServices(input, options) { const results = {}; for (const type of Array.isArray(input) ? input : [input]) { for (const service of type.kind === 'service' ? [type] : type.services) { const serviceDefinition = (results[service.typeName] ??= {}); for (const method of service.methods) { serviceDefinition[method.name] = createMethodDefinition(method, options); } } } return results; } function createMethodDefinition(method, options) { return { path: `/${method.parent.typeName}/${method.name}`, originalName: method.localName, requestStream: method.methodKind === 'client_streaming' || method.methodKind === 'bidi_streaming', responseStream: method.methodKind === 'server_streaming' || method.methodKind === 'bidi_streaming', requestSerialize: createSerializer(method.input), requestDeserialize: createDeserializer(method.input, options), responseSerialize: createSerializer(method.output), responseDeserialize: createDeserializer(method.output, options), }; } function createSerializer(schema) { return (value) => { const message = (0, transformers_1.initMessage)(schema, value); return Buffer.from((0, protobuf_1.toBinary)(schema, message)); }; } function createDeserializer(schema, options) { return (bytes) => { return (0, transformers_1.populateInPlace)(schema, (0, protobuf_1.fromBinary)(schema, bytes), options); }; }