UNPKG

@nestjs/microservices

Version:

Nest - modern, fast, powerful node.js web framework (@microservices)

35 lines (34 loc) • 1.31 kB
import { RpcParamtype } from '../enums/rpc-paramtype.enum.js'; import { isNil, isObject } from '@nestjs/common/internal'; /** * A key picks a property of an object payload. Of an array, a Buffer or a * primitive the peer sent instead, it picks only an own property (an element, * a length), not a prototype member: `Buffer#parent` exposes memory shared * with other requests, and a built-in function such as * `Array.prototype.values` passes for a DTO without required properties. * Objects keep resolving inherited properties, as a custom deserializer may * build class instances. */ const getPayloadProperty = (payload, key) => (isObject(payload) && !Array.isArray(payload) && !ArrayBuffer.isView(payload)) || (!isNil(payload) && Object.hasOwn(Object(payload), key)) ? payload[key] : undefined; export class RpcParamsFactory { exchangeKeyForValue(type, data, args) { if (!args) { return null; } switch (type) { case RpcParamtype.PAYLOAD: return data ? getPayloadProperty(args[0], data) : args[0]; case RpcParamtype.CONTEXT: return args[1]; case RpcParamtype.GRPC_CALL: return args[2]; default: return null; } } }