# QueryInputParameter

Describes one query key expected by matcher input decoding.

## Signatures

```ts
export type QueryInputParameter = {
    readonly inputName: string;
    readonly outputName?: string;
    readonly ast: PathAst.Literal | PathAst.Parameter | PathAst.Wildcard;
};
```

## Why

Matcher registration can distinguish scalar, optional, literal, and repeated query policies.

## Ownership and lifetime

`QueryInputParameter` is a readonly structural contract. The concrete arrays, AST nodes, names, and Schemas remain owned by the caller that constructs them.

## Property: ast

Value grammar used to normalize the raw query input.

## Property: ast: Why

Literal, scalar, optional, and repeated-value policies derive from the same Path AST.

## Property: ast: Ownership and lifetime

The analysis record retains this child AST by reference; request-specific strings are not stored
on the AST.

## Property: inputName

URLSearchParams key read from matcher input.

## Property: inputName: Why

The external query key can differ from the decoded output field name.

## Property: inputName: Ownership and lifetime

This immutable string is retained in the returned analysis record and reused for each match.

## Property: outputName

Decoded record key, absent when the AST represents a literal constraint.

## Property: outputName: Why

Literal query declarations participate in matching without adding handler parameters.

## Property: outputName: Ownership and lifetime

This optional immutable string is retained with the analysis record and creates no decoded value
until a candidate is evaluated.
