Skip to content

Commit

Permalink
feature(@nestjs/microservices) use grpc/proto-loader
Browse files Browse the repository at this point in the history
  • Loading branch information
jbpionnier committed Aug 8, 2018
1 parent e967ba1 commit 5415659
Show file tree
Hide file tree
Showing 7 changed files with 260 additions and 9 deletions.
119 changes: 119 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"author": "Kamil Mysliwiec",
"license": "MIT",
"dependencies": {
"@grpc/proto-loader": "^0.3.0",
"@nestjs/common": "5.1.0",
"@nestjs/core": "5.1.0",
"@nestjs/microservices": "5.1.0",
Expand Down
10 changes: 6 additions & 4 deletions packages/microservices/client/client-grpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { ClientProxy } from './client-proxy';
import { GRPC_CANCELLED } from './constants';

let grpcPackage: any = {};
let grpcProtoLoaderPackage: any = {};

export class ClientGrpcProxy extends ClientProxy implements ClientGrpc {
private readonly logger = new Logger(ClientProxy.name);
Expand All @@ -23,6 +24,7 @@ export class ClientGrpcProxy extends ClientProxy implements ClientGrpc {
this.getOptionsProp<GrpcOptions>(options, 'url') || GRPC_DEFAULT_URL;

grpcPackage = loadPackage('grpc', ClientGrpcProxy.name);
grpcProtoLoaderPackage = loadPackage('@grpc/proto-loader', ClientGrpcProxy.name);
this.grpcClient = this.createClient();
}

Expand Down Expand Up @@ -122,12 +124,12 @@ export class ClientGrpcProxy extends ClientProxy implements ClientGrpc {

public loadProto(): any {
try {
const root = this.getOptionsProp<GrpcOptions>(this.options, 'root');
const file = this.getOptionsProp<GrpcOptions>(this.options, 'protoPath');
const options = root ? { root, file } : file;
const loader = this.getOptionsProp<GrpcOptions>(this.options, 'loader');

const context = grpcPackage.load(options);
return context;
const packageDefinition = grpcProtoLoaderPackage.loadSync(file, loader);
const packageObject = grpcPackage.loadPackageDefinition(packageDefinition);
return packageObject;
} catch (err) {
const invalidProtoError = new InvalidProtoDefinitionException();
const message =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,20 @@ export interface GrpcOptions {
url?: string;
credentials?: any;
protoPath: string;
root?: string;
package: string;
loader?: {
keepCase?: boolean;
alternateCommentMode?: boolean;
longs?: Function;
enums?: Function;
bytes?: Function;
defaults?: boolean;
arrays?: boolean;
objects?: boolean;
oneofs?: boolean;
json?: boolean;
includeDirs?: string[];
}
};
}

Expand Down
10 changes: 6 additions & 4 deletions packages/microservices/server/server-grpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { GrpcOptions, MicroserviceOptions } from '../interfaces/microservice-con
import { Server } from './server';

let grpcPackage: any = {};
let grpcProtoLoaderPackage: any = {};

export class ServerGrpc extends Server implements CustomTransportStrategy {
private readonly url: string;
Expand All @@ -19,6 +20,7 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
this.getOptionsProp<GrpcOptions>(options, 'url') || GRPC_DEFAULT_URL;

grpcPackage = this.loadPackage('grpc', ServerGrpc.name);
grpcProtoLoaderPackage = this.loadPackage('@grpc/proto-loader', ServerGrpc.name);
}

public async listen(callback: () => void) {
Expand Down Expand Up @@ -149,12 +151,12 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {

public loadProto(): any {
try {
const root = this.getOptionsProp<GrpcOptions>(this.options, 'root');
const file = this.getOptionsProp<GrpcOptions>(this.options, 'protoPath');
const options = root ? { root, file } : file;
const loader = this.getOptionsProp<GrpcOptions>(this.options, 'loader');

const context = grpcPackage.load(options);
return context;
const packageDefinition = grpcProtoLoaderPackage.loadSync(file, loader);
const packageObject = grpcPackage.loadPackageDefinition(packageDefinition);
return packageObject;
} catch (err) {
const invalidProtoError = new InvalidProtoDefinitionException();
const message = err && err.message ? err.message : invalidProtoError.message;
Expand Down
114 changes: 114 additions & 0 deletions sample/04-grpc/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions sample/04-grpc/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"start:prod": "node dist/main.js"
},
"dependencies": {
"@grpc/proto-loader": "^0.3.0",
"@nestjs/common": "^5.1.0",
"@nestjs/core": "^5.1.0",
"@nestjs/microservices": "^5.1.0",
Expand Down

0 comments on commit 5415659

Please sign in to comment.