# RouteAst.Transform

A Route AST node carrying an Effect Schema transformation.

## Signatures

```ts
interface Transform {
    type: "transform";
    from: RouteAst;
    to: Top;
    transformation: Transformation<any, any, any, any>;
}
```

## Why

Schema-backed parameters can change decoded types while retaining their encoded route shape.

## Ownership and lifetime

`Transform` describes plain readonly AST data. Routes and Matchers retain the concrete nodes they receive by reference; the type itself owns no resource.

## Property: from

The encoded Route AST consumed by a schema transformation.

## Property: from: Why

The executor can decode from the path-shaped representation before producing the transformed type.

## Property: from: Ownership and lifetime

`RouteAst.Transform` retains the encoded child Route AST by reference for later schema
projection and decoding.

## Property: to

The target Effect Schema for transformed route parameters.

## Property: to: Why

The route carries the exact decoded type and its service requirements.

## Property: to: Ownership and lifetime

The containing `Transform` node retains its `to` Schema by reference; services are acquired only when that Schema runs.

## Property: transformation

The Effect Schema transformation applied to route parameters.

## Property: transformation: Why

Decode and encode behavior, errors, and service requirements remain in the schema contract.

## Property: transformation: Ownership and lifetime

The transformation object is retained by reference. Any services it requires are acquired by
the Effect that later runs the derived Schema.

## Property: type

The discriminant identifying this AST variant.

## Property: type: Why

Exhaustive switches can interpret syntax without instanceof checks or hidden classes.
