mirror of
https://github.com/nestjs/nest.git
synced 2026-02-21 23:11:44 +00:00
feat(microservices): add grpc pkg-load hook to support server extensions
This commit is contained in:
@@ -66,6 +66,7 @@ export interface GrpcOptions {
|
||||
protoLoader?: string;
|
||||
packageDefinition?: any;
|
||||
gracefulShutdown?: boolean;
|
||||
onLoadPackageDefinition?: (pkg: any, server: any) => void;
|
||||
loader?: {
|
||||
keepCase?: boolean;
|
||||
alternateCommentMode?: boolean;
|
||||
|
||||
@@ -509,6 +509,14 @@ export class ServerGrpc extends Server implements CustomTransportStrategy {
|
||||
this.options,
|
||||
grpcProtoLoaderPackage,
|
||||
);
|
||||
|
||||
if (this.options.onLoadPackageDefinition) {
|
||||
this.options.onLoadPackageDefinition(
|
||||
packageDefinition,
|
||||
this.grpcClient,
|
||||
);
|
||||
}
|
||||
|
||||
return grpcPackage.loadPackageDefinition(packageDefinition);
|
||||
} catch (err) {
|
||||
const invalidProtoError = new InvalidProtoDefinitionException(err.path);
|
||||
|
||||
34
sample/04-grpc/package-lock.json
generated
34
sample/04-grpc/package-lock.json
generated
@@ -10,6 +10,7 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@grpc/grpc-js": "1.10.0",
|
||||
"@grpc/reflection": "1.0.3",
|
||||
"@nestjs/common": "10.3.2",
|
||||
"@nestjs/core": "10.3.2",
|
||||
"@nestjs/microservices": "10.3.2",
|
||||
@@ -1039,6 +1040,18 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/@grpc/reflection": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@grpc/reflection/-/reflection-1.0.3.tgz",
|
||||
"integrity": "sha512-Fe1F1HpBSbOb2v4DOnZa2TiQkUJrj0/7camKUNoH6OfOXw/GO82e0gA4Eihbsuga8dZxJYNBHsig/c58SG2c/g==",
|
||||
"dependencies": {
|
||||
"@grpc/proto-loader": "^0.7.10",
|
||||
"protobufjs": "^7.2.5"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@grpc/grpc-js": "^1.8.21"
|
||||
}
|
||||
},
|
||||
"node_modules/@humanwhocodes/config-array": {
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
|
||||
@@ -7744,9 +7757,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/protobufjs": {
|
||||
"version": "7.2.4",
|
||||
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz",
|
||||
"integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==",
|
||||
"version": "7.2.6",
|
||||
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz",
|
||||
"integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@protobufjs/aspromise": "^1.1.2",
|
||||
@@ -10297,6 +10310,15 @@
|
||||
"yargs": "^17.7.2"
|
||||
}
|
||||
},
|
||||
"@grpc/reflection": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@grpc/reflection/-/reflection-1.0.3.tgz",
|
||||
"integrity": "sha512-Fe1F1HpBSbOb2v4DOnZa2TiQkUJrj0/7camKUNoH6OfOXw/GO82e0gA4Eihbsuga8dZxJYNBHsig/c58SG2c/g==",
|
||||
"requires": {
|
||||
"@grpc/proto-loader": "^0.7.10",
|
||||
"protobufjs": "^7.2.5"
|
||||
}
|
||||
},
|
||||
"@humanwhocodes/config-array": {
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
|
||||
@@ -15315,9 +15337,9 @@
|
||||
}
|
||||
},
|
||||
"protobufjs": {
|
||||
"version": "7.2.4",
|
||||
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz",
|
||||
"integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==",
|
||||
"version": "7.2.6",
|
||||
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz",
|
||||
"integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==",
|
||||
"requires": {
|
||||
"@protobufjs/aspromise": "^1.1.2",
|
||||
"@protobufjs/base64": "^1.1.2",
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@grpc/grpc-js": "1.10.0",
|
||||
"@grpc/reflection": "1.0.3",
|
||||
"@nestjs/common": "10.3.2",
|
||||
"@nestjs/core": "10.3.2",
|
||||
"@nestjs/microservices": "10.3.2",
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { ReflectionService } from '@grpc/reflection';
|
||||
import { ClientOptions, Transport } from '@nestjs/microservices';
|
||||
import { join } from 'path';
|
||||
|
||||
@@ -6,5 +7,8 @@ export const grpcClientOptions: ClientOptions = {
|
||||
options: {
|
||||
package: 'hero', // ['hero', 'hero2']
|
||||
protoPath: join(__dirname, './hero/hero.proto'), // ['./hero/hero.proto', './hero/hero2.proto']
|
||||
onLoadPackageDefinition: (pkg, server) => {
|
||||
new ReflectionService(pkg).addToServer(server);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user