UNPKG

@russ-b/nestjs-common-tools

Version:
73 lines 3.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseClientGrpcProxy = void 0; const microservices_1 = require("@nestjs/microservices"); const rxjs_1 = require("rxjs"); const transformers_1 = require("../transformers"); class BaseClientGrpcProxy extends microservices_1.ClientGrpcProxy { getService(name) { const service = super.getService(name); const packageDefinition = this.getClient(name); const methodFields = packageDefinition[name]; return new Proxy(service, { get: (target, prop) => { if (typeof target[prop] !== 'function') { return target[prop]; } return (...args) => { const methodName = this.getMethodName(target, prop); const fields = this.getMethodFields(methodFields, methodName); if (args.length > 0 && args[0] && typeof args[0] === 'object') { const dto = args[0]; const structFields = Reflect.getMetadata('IS_GRPC_STRUCT_KEY', dto.constructor?.prototype) || []; if (structFields.length) { const modified = { ...dto }; structFields.forEach((field) => { if (modified[field]) { modified[field] = transformers_1.StructTransformer.toObject(modified[field]); } }); args[0] = modified; } } return target[prop].apply(target, args).pipe((0, rxjs_1.map)((response) => { const structFields = fields.response .filter((field) => field.typeName === 'google.protobuf.Struct') .map((f) => f.name) || []; if (structFields.length) { structFields.forEach((field) => { response[field] = transformers_1.StructTransformer.toObject(response[field]); }); } return response; })); }; }, }); } getMethodName(target, prop) { const methodName = Object.keys(target).find((key) => key.toLowerCase() === prop.toLowerCase() && key !== prop); if (!methodName) { throw new Error(`Undefined methodName ${prop}`); } return methodName; } getMethodFields(service, methodName) { const method = service?.[methodName]; return { request: method.requestType.type?.field, response: method.responseType.type?.field, }; } serializeError(err) { if (typeof err === 'string') { return new microservices_1.RpcException(err); } if (err && typeof err === 'object') { return new microservices_1.RpcException(err); } return new microservices_1.RpcException('Unknown error occurred'); } } exports.BaseClientGrpcProxy = BaseClientGrpcProxy; //# sourceMappingURL=base-client-grpc.proxy.js.map