JsonParameterStore
Usage
import { JsonParameterStore } from "@tsed/schema";See /packages/specs/schema/src/domain/JsonParameterStore.ts.
Overview
class JsonParameterStore extends JsonEntityStore {
paramType: string;
expression: string;
dataPath: string;
pipes: Type<PipeMethods>[];
readonly parameter: JsonParameter;
readonly parent: JsonMethodStore;
constructor(options: JsonParameterStoreOptions);
get required(): boolean;
set required(value: boolean);
get allowedRequiredValues(): any[];
get schema(): import("./JsonSchema.js").JsonSchema<import("json-schema").JSONSchema7Type>;
static getParams<T extends JsonParameterStore = JsonParameterStore>(target: Type<any>, propertyKey: string | symbol): T[];
static get(target: Type<any>, propertyKey: string | symbol, index: number): JsonParameterStore;
isRequired(value: any): boolean;
protected build(): void;
}Description
Store for method parameter metadata and schema information.
JsonParameterStore manages metadata for method parameters decorated with decorators like @BodyParams(), @PathParams(), @QueryParams(), etc. It handles parameter validation, transformation pipes, and OpenAPI parameter generation.
Responsibilities
- Parameter Definition: Maintains JsonParameter for OpenAPI spec generation
- Type Resolution: Resolves parameter types from TypeScript metadata
- Validation: Manages required/optional state and validation rules
- Transformation: Coordinates pipe execution for value transformation
- Location Tracking: Stores where the parameter comes from (path, query, body, etc.)
Usage
// Get parameter store
const paramStore = JsonParameterStore.get(MyController, "myMethod", 0);
// Access parameter definition
const parameter = paramStore.parameter;
// Check if required
const isRequired = paramStore.required;
// Get all parameters for a method
const params = JsonParameterStore.getParams(MyController, "myMethod");Parameter Types
Parameters can come from different locations:
- path: URL path parameters (
/users/:id) - query: Query string parameters (
?page=1) - body: Request body
- header: HTTP headers
- cookies: Cookie values
- files: File uploads
Validation
The store provides validation helpers:
required: Marks parameter as requiredallowedRequiredValues: Values that bypass required checkisRequired(value): Checks if a value satisfies required constraint
Transformation Pipes
Parameters can have transformation pipes that process values:
@Controller("/")
class MyController {
@Get("/:id")
get(@PathParams("id") @UsePipe(ParseIntPipe) id: number) {
// id is automatically transformed to number
}
}Expression Binding
Parameters can use expressions to extract nested values:
@BodyParams("user.address.city") city: string
// Extracts: request.body.user.address.cityparamType
paramType: string;expression
expression: string;dataPath
dataPath: string;pipes
pipes: Type<PipeMethods>[];Define pipes can be called by the framework to transform input parameter
readonly parameter
readonly parameter: JsonParameter;Ref to JsonParameter when the decorated object is a parameter.
readonly parent
readonly parent: JsonMethodStore;get required
get required(): boolean;Return the required state.
set required
set required(value: boolean);get allowedRequiredValues
get allowedRequiredValues(): any[];get schema
get schema(): import("./JsonSchema.js").JsonSchema<import("json-schema").JSONSchema7Type>;static getParams
static getParams<T extends JsonParameterStore = JsonParameterStore>(target: Type<any>, propertyKey: string | symbol): T[];static get
static get(target: Type<any>, propertyKey: string | symbol, index: number): JsonParameterStore;isRequired
isRequired(value: any): boolean;Check precondition between value, required and allowedRequiredValues to know if the entity is required.
protected build
protected build(): void;