GraphQL:转换输入字段以通过验证(trim 字符串值)

GraphQL: Transform input field to pass validation (trim string value)

我正在使用 class-validator 包来验证 GraphQL 输入类型中的 link。 问题是当 link 在输入字符串的末尾包含空格时验证失败。 有没有办法在验证之前trim它?

import { InputType, Field, Int } from 'type-graphql';
import { IsUrl, IsOptional } from 'class-validator';
import { Project } from '../entities';

@InputType()
export default class UpdateProjectInput implements Partial<Project> {
    @Field(type => Int)
    id: number;

    @Field({ nullable: true })
    @IsUrl({}, { message: 'Link is not a valid url' })
    @IsOptional()
    link?: string;
}

自定义装饰器

export default function Transform(
    cb: (value: any) => any
): (target: Object, propertyKey: string | symbol) => void {
    return function (target: Object, propertyKey: string | symbol) {
        Object.defineProperty(target, propertyKey, {
            set(value) {
                this.value = cb(value);
            },
            enumerable: true,
            configurable: true,
        });
    };
}

及其用法

@InputType()
export default class UpdateProjectInput implements Partial<Project> {
    @Field(type => Int)
    id: number;

    @Field({ nullable: true })
    @Transform(value => value?.trim())
    @IsUrl({}, { message: 'Link is not a valid url' })
    @IsOptional()
    link?: string;
}