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