UNPKG

@nestjs/websockets

Version:

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

42 lines (41 loc) 1.83 kB
import { assignMetadata } from '@nestjs/common'; import { isNil, isParameterDecoratorOptions, isString, } from '@nestjs/common/internal'; import 'reflect-metadata'; import { PARAM_ARGS_METADATA } from '../constants.js'; export function createWsParamDecorator(paramtype) { return (...pipes) => (target, key, index) => { const args = Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key) || {}; Reflect.defineMetadata(PARAM_ARGS_METADATA, assignMetadata(args, paramtype, index, { pipes }), target.constructor, key); }; } export const createPipesWsParamDecorator = (paramtype) => (data, optionsOrPipe, ...pipes) => (target, key, index) => { const args = Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key) || {}; const isDataOptions = isParameterDecoratorOptions(data); if (isDataOptions) { const opts = data; Reflect.defineMetadata(PARAM_ARGS_METADATA, assignMetadata(args, paramtype, index, { pipes: opts.pipes ?? [], schema: opts.schema, }), target.constructor, key); return; } const hasParamData = isNil(data) || isString(data); const paramData = hasParamData ? data : undefined; const isOptions = isParameterDecoratorOptions(optionsOrPipe); let paramPipes; if (isOptions) { paramPipes = [...(optionsOrPipe.pipes ?? []), ...pipes]; } else if (hasParamData) { paramPipes = [optionsOrPipe, ...pipes].filter(Boolean); } else { paramPipes = [data, optionsOrPipe, ...pipes].filter(Boolean); } Reflect.defineMetadata(PARAM_ARGS_METADATA, assignMetadata(args, paramtype, index, { data: paramData, pipes: paramPipes, schema: isOptions ? optionsOrPipe.schema : undefined, }), target.constructor, key); };