@nestia/core
Version:
Super-fast validation decorators of NestJS
77 lines (74 loc) • 2.34 kB
text/typescript
import ts from "typescript";
import { IdentifierFactory } from "typia/lib/factories/IdentifierFactory";
import { StatementFactory } from "typia/lib/factories/StatementFactory";
import { ValidateProgrammer } from "typia/lib/programmers/ValidateProgrammer";
import { ITypiaContext } from "typia/lib/transformers/ITypiaContext";
import { HttpQuerifyProgrammer } from "./HttpQuerifyProgrammer";
export namespace HttpValidateQuerifyProgrammer {
export const write = (props: {
context: ITypiaContext;
modulo: ts.LeftHandSideExpression;
type: ts.Type;
}): ts.ArrowFunction =>
ts.factory.createArrowFunction(
undefined,
undefined,
[IdentifierFactory.parameter("input")],
undefined,
undefined,
ts.factory.createBlock([
StatementFactory.constant({
name: "validate",
value: ValidateProgrammer.write({
config: {
equals: false,
},
context: {
...props.context,
options: {
...props.context.options,
functional: false,
numeric: true,
},
},
modulo: props.modulo,
type: props.type,
name: undefined,
}),
}),
StatementFactory.constant({
name: "query",
value: HttpQuerifyProgrammer.write({
context: {
...props.context,
options: {
...props.context.options,
functional: false,
numeric: false,
},
},
modulo: props.modulo,
type: props.type,
}),
}),
StatementFactory.constant({
name: "output",
value: ts.factory.createCallExpression(
ts.factory.createIdentifier("query"),
undefined,
[ts.factory.createIdentifier("input")],
),
}),
ts.factory.createReturnStatement(
ts.factory.createAsExpression(
ts.factory.createCallExpression(
ts.factory.createIdentifier("validate"),
undefined,
[ts.factory.createIdentifier("output")],
),
ts.factory.createTypeReferenceNode("any"),
),
),
]),
);
}