Skip to content

Commit 4d81f65

Browse files
committed
Move ValidationPipe to its own module & expose as service
1 parent f62a054 commit 4d81f65

File tree

8 files changed

+41
-25
lines changed

8 files changed

+41
-25
lines changed

src/common/validators/short-id.validator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ArgumentMetadata, PipeTransform } from '@nestjs/common';
22
import { ValidationOptions } from 'class-validator';
3-
import { ValidationException } from '../../core/validation.pipe';
3+
import { ValidationException } from '~/core/validation';
44
import { isValidId } from '../generate-id';
55
import { ValidateBy } from './validateBy';
66

src/components/changeset/dto/changeset.args.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { PipeTransform } from '@nestjs/common';
22
import { Args, ArgsType } from '@nestjs/graphql';
3-
import { ID, IdField, ObjectView } from '../../../common';
4-
import { ValidationPipe } from '../../../core/validation.pipe';
3+
import { ID, IdField, ObjectView } from '~/common';
4+
import { ValidationPipe } from '~/core/validation';
55

66
/**
77
* A helper for id & changeset arguments.

src/core/core.module.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Global, Module } from '@nestjs/common';
2-
import { APP_FILTER, APP_INTERCEPTOR, APP_PIPE } from '@nestjs/core';
2+
import { APP_FILTER, APP_INTERCEPTOR } from '@nestjs/core';
33
import { DataLoaderModule } from '@seedcompany/data-loader';
44
import { EmailModule } from '@seedcompany/nestjs-email';
55
import { ConsoleModule } from 'nestjs-console';
@@ -19,7 +19,7 @@ import { ResourceModule } from './resources/resource.module';
1919
import { ScalarProviders } from './scalars.resolver';
2020
import { TimeoutInterceptor } from './timeout.interceptor';
2121
import { TracingModule } from './tracing';
22-
import { ValidationPipe } from './validation.pipe';
22+
import { ValidationModule } from './validation/validation.module';
2323
import { WaitResolver } from './wait.resolver';
2424

2525
@Global()
@@ -36,13 +36,13 @@ import { WaitResolver } from './wait.resolver';
3636
EventsModule,
3737
TracingModule,
3838
ResourceModule,
39+
ValidationModule,
3940
],
4041
providers: [
4142
AwsS3Factory,
4243
ExceptionNormalizer,
4344
ExceptionFilter,
4445
{ provide: APP_FILTER, useExisting: ExceptionFilter },
45-
{ provide: APP_PIPE, useClass: ValidationPipe },
4646
{ provide: APP_INTERCEPTOR, useClass: TimeoutInterceptor },
4747
WaitResolver,
4848
...ScalarProviders,
@@ -60,6 +60,7 @@ import { WaitResolver } from './wait.resolver';
6060
EventsModule,
6161
ResourceModule,
6262
TracingModule,
63+
ValidationModule,
6364
],
6465
})
6566
export class CoreModule {}

src/core/exception/exception.filter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { GqlContextType, GqlExceptionFilter } from '@nestjs/graphql';
44
import { mapValues } from '@seedcompany/common';
55
import { ConfigService } from '../config/config.service';
66
import { ILogger, Logger, LogLevel } from '../logger';
7-
import { ValidationException } from '../validation.pipe';
7+
import { ValidationException } from '../validation';
88
import { ExceptionJson, ExceptionNormalizer } from './exception.normalizer';
99
import { isFromHackAttempt } from './is-from-hack-attempt';
1010

src/core/validation/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './validation.exception';
2+
export * from './validation.pipe';

src/core/validation.pipe.ts renamed to src/core/validation/validation.exception.ts

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,9 @@
1-
import {
2-
ValidationPipe as BaseValidationPipe,
3-
Injectable,
4-
ValidationError,
5-
} from '@nestjs/common';
1+
import { ValidationError } from '@nestjs/common';
62
import { entries } from '@seedcompany/common';
73
import { SetRequired } from 'type-fest';
84
import { fileURLToPath } from 'url';
9-
import { ClientException } from '../common/exceptions';
10-
import { jestSkipFileInExceptionSource } from './exception';
11-
12-
@Injectable()
13-
export class ValidationPipe extends BaseValidationPipe {
14-
constructor() {
15-
super({
16-
transform: true,
17-
skipMissingProperties: true,
18-
exceptionFactory: (es) => new ValidationException(es),
19-
});
20-
}
21-
}
5+
import { ClientException } from '~/common/exceptions';
6+
import { jestSkipFileInExceptionSource } from '../exception';
227

238
export class ValidationException extends ClientException {
249
readonly errors: Record<string, Record<string, string>>;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Module } from '@nestjs/common';
2+
import { APP_PIPE } from '@nestjs/core';
3+
import { ValidationPipe } from './validation.pipe';
4+
5+
@Module({
6+
providers: [
7+
ValidationPipe,
8+
{ provide: APP_PIPE, useExisting: ValidationPipe },
9+
],
10+
exports: [ValidationPipe],
11+
})
12+
export class ValidationModule {}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import {
2+
ValidationPipe as BaseValidationPipe,
3+
Injectable,
4+
} from '@nestjs/common';
5+
import { ValidationException } from './validation.exception';
6+
7+
@Injectable()
8+
export class ValidationPipe extends BaseValidationPipe {
9+
constructor() {
10+
super({
11+
transform: true,
12+
skipMissingProperties: true,
13+
exceptionFactory: (es) => new ValidationException(es),
14+
});
15+
}
16+
}

0 commit comments

Comments
 (0)