@nestjs/microservices
Version:
Nest - modern, fast, powerful node.js web framework (@microservices)
35 lines (34 loc) • 1.31 kB
JavaScript
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;
}
}
}