-
-
Notifications
You must be signed in to change notification settings - Fork 7.6k
/
pipes-consumer.ts
30 lines (27 loc) · 1.02 KB
/
pipes-consumer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import { RouteParamtypes } from '@nestjs/common/enums/route-paramtypes.enum';
import { ArgumentMetadata, PipeTransform } from '@nestjs/common/interfaces';
import { ParamsTokenFactory } from './params-token-factory';
export class PipesConsumer {
private readonly paramsTokenFactory = new ParamsTokenFactory();
public async apply<TInput = unknown>(
value: TInput,
{ metatype, type, data }: ArgumentMetadata,
pipes: PipeTransform[],
) {
const token = this.paramsTokenFactory.exchangeEnumForString(
type as any as RouteParamtypes,
);
return this.applyPipes(value, { metatype, type: token, data }, pipes);
}
public async applyPipes<TInput = unknown>(
value: TInput,
{ metatype, type, data }: { metatype: any; type?: any; data?: any },
transforms: PipeTransform[],
) {
return transforms.reduce(async (deferredValue, pipe) => {
const val = await deferredValue;
const result = pipe.transform(val, { metatype, type, data });
return result;
}, Promise.resolve(value));
}
}