@nestjs/graphql
Version:
Nest - modern, fast, powerful node.js web framework (@graphql)
30 lines (29 loc) • 1.37 kB
JavaScript
import { isNil, isString } from '@nestjs/common/utils/shared.utils.js';
import 'reflect-metadata';
import { PARAM_ARGS_METADATA } from '../graphql.constants.js';
function assignMetadata(args, paramtype, index, data, ...pipes) {
return {
...args,
[`${paramtype}:${index}`]: {
index,
data,
pipes,
},
};
}
export const createGqlParamDecorator = (paramtype) => {
return (data) => (target, key, index) => {
const args = Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key) || {};
Reflect.defineMetadata(PARAM_ARGS_METADATA, assignMetadata(args, paramtype, index, data), target.constructor, key);
};
};
export const addPipesMetadata = (paramtype, data, pipes, target, key, index) => {
const args = Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key) || {};
const hasParamData = isNil(data) || isString(data);
const paramData = hasParamData ? data : undefined;
const paramPipes = hasParamData ? pipes : [data, ...pipes];
Reflect.defineMetadata(PARAM_ARGS_METADATA, assignMetadata(args, paramtype, index, paramData, ...paramPipes), target.constructor, key);
};
export const createGqlPipesParamDecorator = (paramtype) => (data, ...pipes) => (target, key, index) => {
addPipesMetadata(paramtype, data, pipes, target, key, index);
};