Skip to content

tonybart1337/grpc-loader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gRPC loader module for webpack

Converts .proto files into autogenerated js files for use with gRPC

Installation

yarn add --dev grpc-loader

Usage

static: true You can ignore protobufjs peer dependency if you use this option. P.S. I don't really like this api. It's too verbose. google-protobuf

const proto = require('./test.proto');
console.log(proto);

// {
//   services: {
//     GreeterService: {
//       sayHello: [Object]
//     },
//     GreeterClient: {
//       [Function: ServiceClient] super_: [Function: Client],
//       service: [Object]
//     }
//   },
//   messages: {
//     HelloReply: {
//       [Function]
//       superClass_: [Object],
//       base: [Function],
//       toObject: [Function],
//       deserializeBinary: [Function],
//       deserializeBinaryFromReader: [Function],
//       serializeBinaryToWriter: [Function]
//     },
//     HelloRequest: {
//       [Function]
//       superClass_: [Object],
//       base: [Function],
//       toObject: [Function],
//       deserializeBinary: [Function],
//       deserializeBinaryFromReader: [Function],
//       serializeBinaryToWriter: [Function]
//     }
//   }
// }

static: false You can ignore google-protobuf peer dependency if you use this option. same as grpc.load you can also pass any properties that grpc.load accepts

const proto = require('./test.proto');
console.log(proto);

// {
//   helloworld: {
//     Greeter: {
//       [
//         Function: ServiceClient
//       ]super_: [
//         Function: Client
//       ],
//       service: [
//         Object
//       ]
//     },
//     HelloRequest: {
//       
//     },
//     HelloReply: {
//       
//     }
//   }
// }

For usage checkout test folder

Test

npm run test

webpack config

module.exports = {
  module: {
    rules: [
      {
        test: /\.proto$/,
        loader: 'grpc-loader',
        options: {
          // both methods are static internally
          // but result api differs
          // https://github.com/grpc/grpc/tree/master/examples/node
          static: false,

          // grpc props
          // https://github.com/grpc/grpc-node/blob/master/packages/grpc-protobufjs/index.js#L37-L42
          //  convertFieldsToCamelCase,
          //  binaryAsBase64,
          //  longsAsStrings,
          //  enumsAsStrings,
        },
      }
    ]
  }
};

License

MIT (http://www.opensource.org/licenses/mit-license.php)