Skip to content

feature: Support HTTP request context in custom decorators #2623

@tropical-coder

Description

@tropical-coder

It’d be great if class-validator could inject the original HTTP request (e.g., req.subdomains) into custom validator constraints—without hacks like manipulating the DTO or using interceptors.


Motivation – Subdomain-based validation:

export class MyDto {
  @IsValidForSubdomain()
  someProp: string;
}
// Custom validator should access req.subdomains directly.

Current workaround (ugly):

  1. Interceptor attaches req.subdomains to DTO.
  2. Validator reads it via args.object['subdomains'].

Messy, collision-prone, and framework-specific.


Proposed API:

export function IsValidForSubdomain(
  validationOptions?: ValidationOptions
) {
  return function (object: Object, propertyName: string) {
    registerDecorator({
      name: "isValidForSubdomain",
      target: object.constructor,
      propertyName: propertyName,
      options: validationOptions,
      validator: {
        validate(value: any, args: ValidationArguments, req) {
          return req.subdomains.includes('api') ? customCheck(value) : true;
        }
      }
    });
  };
}

Benefits:

  • Clean and explicit
  • No DTO pollution
  • Framework-agnostic and safer DX

Metadata

Metadata

Assignees

No one assigned

    Labels

    flag: needs discussionIssues which needs discussion before implementation.type: featureIssues related to new features.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions