{
  "id": "@typed/router/Route#Route",
  "canonicalId": "@typed/router#Route",
  "symbol": {
    "id": "@typed/router/Route#Route",
    "packageName": "@typed/router",
    "moduleName": "Route",
    "exportName": "Route",
    "kind": "interface",
    "signatures": [
      "export interface Route<P extends string, S extends Schema.Codec<any, Path.Params<P>, any, any> = Schema.Codec<Path.Params<P>>> extends Pipeable {\n    readonly ast: AST.RouteAst;\n    readonly path: P;\n    readonly paramsSchema: S;\n    readonly pathSchema: Schema.Codec<Path.PathParams<P>>;\n    readonly querySchema: Schema.Codec<Path.QueryParams<P>>;\n}",
      "export declare namespace Route {\n    type Any = Route<any, any>;\n    type Path<T> = T extends Route<infer P, any> ? P : never;\n    type Schema<T> = T extends Route<any, infer S> ? S : never;\n    type Type<T> = T extends Route<any, infer S> ? S[\"Type\"] : never;\n    type Params<T> = T extends Route<infer P, infer _S> ? Path.Params<P> : never;\n    type DecodingServices<T> = T extends Route<any, infer S> ? S[\"DecodingServices\"] : never;\n    type EncodingServices<T> = T extends Route<any, infer S> ? S[\"EncodingServices\"] : never;\n    type PathType<T extends Any> = T[\"pathSchema\"][\"Type\"];\n    type QueryType<T extends Any> = T[\"querySchema\"][\"Type\"];\n}"
    ],
    "summary": "A pipeable route value containing syntax, normalized path, and Effect Schemas.",
    "sections": {
      "Why": "Matching and parameter decoding share one immutable source of truth.",
      "Ownership and lifetime": "A Route value retains its AST and memoized derived values until that Route becomes unreachable; it owns no Scope.",
      "Property: ast": "The immutable Route AST compiled by Matcher.",
      "Property: ast: Why": "Advanced composition can inspect structure without reparsing the formatted path.",
      "Property: ast: Ownership and lifetime": "The Route retains its `ast` value for the Route's lifetime. Reading it performs no acquisition; Codec services are required only when a schema is executed.",
      "Property: paramsSchema": "The Effect Schema for the route's combined decoded parameters.",
      "Property: paramsSchema: Why": "Matcher handlers receive the schema's Type and service/error behavior exactly.",
      "Property: paramsSchema: Ownership and lifetime": "The Route retains its `paramsSchema` value for the Route's lifetime. Reading it performs no acquisition; Codec services are required only when a schema is executed.",
      "Property: path": "The normalized route string derived from this Route's AST.",
      "Property: path: Why": "Matcher registration and links use one memoized formatting result.",
      "Property: path: Ownership and lifetime": "The Route retains its `path` value for the Route's lifetime. Reading it performs no acquisition; Codec services are required only when a schema is executed.",
      "Property: pathSchema": "The Effect Schema for decoded path parameters only.",
      "Property: pathSchema: Why": "Handlers and tools can validate path values independently of query input.",
      "Property: pathSchema: Ownership and lifetime": "The Route retains its `pathSchema` value for the Route's lifetime. Reading it performs no acquisition; Codec services are required only when a schema is executed.",
      "Property: querySchema": "The Effect Schema for decoded query parameters only.",
      "Property: querySchema: Why": "Query parsing policy remains available separately from path decoding.",
      "Property: querySchema: Ownership and lifetime": "The Route retains its `querySchema` value for the Route's lifetime. Reading it performs no acquisition; Codec services are required only when a schema is executed."
    },
    "examples": [],
    "relations": [],
    "source": {
      "file": "packages/router/src/Route.ts",
      "line": 25
    },
    "since": "1.0.0",
    "category": "Route contracts"
  },
  "exposure": {
    "recordKind": "declaration",
    "id": "@typed/router/Route#Route",
    "packageName": "@typed/router",
    "packageVersion": "1.0.0-beta.7",
    "moduleName": "Route",
    "consumerSpecifier": "@typed/router/Route",
    "exportName": "Route",
    "qualifiedName": "Route",
    "declarationKey": "declaration:6b9f2b546fb2205b89ff9834",
    "family": "interface",
    "signatures": [
      "export interface Route<P extends string, S extends Schema.Codec<any, Path.Params<P>, any, any> = Schema.Codec<Path.Params<P>>> extends Pipeable {\n    readonly ast: AST.RouteAst;\n    readonly path: P;\n    readonly paramsSchema: S;\n    readonly pathSchema: Schema.Codec<Path.PathParams<P>>;\n    readonly querySchema: Schema.Codec<Path.QueryParams<P>>;\n}",
      "export declare namespace Route {\n    type Any = Route<any, any>;\n    type Path<T> = T extends Route<infer P, any> ? P : never;\n    type Schema<T> = T extends Route<any, infer S> ? S : never;\n    type Type<T> = T extends Route<any, infer S> ? S[\"Type\"] : never;\n    type Params<T> = T extends Route<infer P, infer _S> ? Path.Params<P> : never;\n    type DecodingServices<T> = T extends Route<any, infer S> ? S[\"DecodingServices\"] : never;\n    type EncodingServices<T> = T extends Route<any, infer S> ? S[\"EncodingServices\"] : never;\n    type PathType<T extends Any> = T[\"pathSchema\"][\"Type\"];\n    type QueryType<T extends Any> = T[\"querySchema\"][\"Type\"];\n}"
    ],
    "sourceSpans": [
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 25,
          "column": 1
        },
        "end": {
          "line": 100,
          "column": 2
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 102,
          "column": 1
        },
        "end": {
          "line": 231,
          "column": 2
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 42,
          "column": 3
        },
        "end": {
          "line": 42,
          "column": 30
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 71,
          "column": 3
        },
        "end": {
          "line": 71,
          "column": 28
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 56,
          "column": 3
        },
        "end": {
          "line": 56,
          "column": 20
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 85,
          "column": 3
        },
        "end": {
          "line": 85,
          "column": 57
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 99,
          "column": 3
        },
        "end": {
          "line": 99,
          "column": 59
        }
      }
    ],
    "aliases": [
      "@typed/router#Route"
    ],
    "isAlias": false,
    "static": false
  },
  "declaration": {
    "declarationKey": "declaration:6b9f2b546fb2205b89ff9834",
    "name": "Route",
    "family": "interface",
    "facets": [
      {
        "family": "interface",
        "syntaxKind": "InterfaceDeclaration",
        "signatures": [
          "export interface Route<P extends string, S extends Schema.Codec<any, Path.Params<P>, any, any> = Schema.Codec<Path.Params<P>>> extends Pipeable {\n    readonly ast: AST.RouteAst;\n    readonly path: P;\n    readonly paramsSchema: S;\n    readonly pathSchema: Schema.Codec<Path.PathParams<P>>;\n    readonly querySchema: Schema.Codec<Path.QueryParams<P>>;\n}"
        ],
        "typeParameters": [
          "P extends string",
          "S extends Schema.Codec<any, Path.Params<P>, any, any> = Schema.Codec<Path.Params<P>>"
        ],
        "sourceSpans": [
          {
            "file": "packages/router/src/Route.ts",
            "start": {
              "line": 25,
              "column": 1
            },
            "end": {
              "line": 100,
              "column": 2
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      },
      {
        "family": "namespace",
        "syntaxKind": "ModuleDeclaration",
        "signatures": [
          "export declare namespace Route {\n    type Any = Route<any, any>;\n    type Path<T> = T extends Route<infer P, any> ? P : never;\n    type Schema<T> = T extends Route<any, infer S> ? S : never;\n    type Type<T> = T extends Route<any, infer S> ? S[\"Type\"] : never;\n    type Params<T> = T extends Route<infer P, infer _S> ? Path.Params<P> : never;\n    type DecodingServices<T> = T extends Route<any, infer S> ? S[\"DecodingServices\"] : never;\n    type EncodingServices<T> = T extends Route<any, infer S> ? S[\"EncodingServices\"] : never;\n    type PathType<T extends Any> = T[\"pathSchema\"][\"Type\"];\n    type QueryType<T extends Any> = T[\"querySchema\"][\"Type\"];\n}"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Route.ts",
            "start": {
              "line": 102,
              "column": 1
            },
            "end": {
              "line": 231,
              "column": 2
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly ast: AST.RouteAst;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Route.ts",
            "start": {
              "line": 42,
              "column": 3
            },
            "end": {
              "line": 42,
              "column": 30
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly paramsSchema: S;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Route.ts",
            "start": {
              "line": 71,
              "column": 3
            },
            "end": {
              "line": 71,
              "column": 28
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly path: P;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Route.ts",
            "start": {
              "line": 56,
              "column": 3
            },
            "end": {
              "line": 56,
              "column": 20
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly pathSchema: Schema.Codec<Path.PathParams<P>>;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Route.ts",
            "start": {
              "line": 85,
              "column": 3
            },
            "end": {
              "line": 85,
              "column": 57
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly querySchema: Schema.Codec<Path.QueryParams<P>>;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Route.ts",
            "start": {
              "line": 99,
              "column": 3
            },
            "end": {
              "line": 99,
              "column": 59
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      }
    ],
    "signatures": [
      "export interface Route<P extends string, S extends Schema.Codec<any, Path.Params<P>, any, any> = Schema.Codec<Path.Params<P>>> extends Pipeable {\n    readonly ast: AST.RouteAst;\n    readonly path: P;\n    readonly paramsSchema: S;\n    readonly pathSchema: Schema.Codec<Path.PathParams<P>>;\n    readonly querySchema: Schema.Codec<Path.QueryParams<P>>;\n}",
      "export declare namespace Route {\n    type Any = Route<any, any>;\n    type Path<T> = T extends Route<infer P, any> ? P : never;\n    type Schema<T> = T extends Route<any, infer S> ? S : never;\n    type Type<T> = T extends Route<any, infer S> ? S[\"Type\"] : never;\n    type Params<T> = T extends Route<infer P, infer _S> ? Path.Params<P> : never;\n    type DecodingServices<T> = T extends Route<any, infer S> ? S[\"DecodingServices\"] : never;\n    type EncodingServices<T> = T extends Route<any, infer S> ? S[\"EncodingServices\"] : never;\n    type PathType<T extends Any> = T[\"pathSchema\"][\"Type\"];\n    type QueryType<T extends Any> = T[\"querySchema\"][\"Type\"];\n}"
    ],
    "typeParameters": [
      "P extends string",
      "S extends Schema.Codec<any, Path.Params<P>, any, any> = Schema.Codec<Path.Params<P>>"
    ],
    "summary": "A pipeable route value containing syntax, normalized path, and Effect Schemas.",
    "sections": {
      "Why": "Matching and parameter decoding share one immutable source of truth.",
      "Ownership and lifetime": "A Route value retains its AST and memoized derived values until that Route becomes unreachable; it owns no Scope.",
      "Property: ast": "The immutable Route AST compiled by Matcher.",
      "Property: ast: Why": "Advanced composition can inspect structure without reparsing the formatted path.",
      "Property: ast: Ownership and lifetime": "The Route retains its `ast` value for the Route's lifetime. Reading it performs no acquisition; Codec services are required only when a schema is executed.",
      "Property: paramsSchema": "The Effect Schema for the route's combined decoded parameters.",
      "Property: paramsSchema: Why": "Matcher handlers receive the schema's Type and service/error behavior exactly.",
      "Property: paramsSchema: Ownership and lifetime": "The Route retains its `paramsSchema` value for the Route's lifetime. Reading it performs no acquisition; Codec services are required only when a schema is executed.",
      "Property: path": "The normalized route string derived from this Route's AST.",
      "Property: path: Why": "Matcher registration and links use one memoized formatting result.",
      "Property: path: Ownership and lifetime": "The Route retains its `path` value for the Route's lifetime. Reading it performs no acquisition; Codec services are required only when a schema is executed.",
      "Property: pathSchema": "The Effect Schema for decoded path parameters only.",
      "Property: pathSchema: Why": "Handlers and tools can validate path values independently of query input.",
      "Property: pathSchema: Ownership and lifetime": "The Route retains its `pathSchema` value for the Route's lifetime. Reading it performs no acquisition; Codec services are required only when a schema is executed.",
      "Property: querySchema": "The Effect Schema for decoded query parameters only.",
      "Property: querySchema: Why": "Query parsing policy remains available separately from path decoding.",
      "Property: querySchema: Ownership and lifetime": "The Route retains its `querySchema` value for the Route's lifetime. Reading it performs no acquisition; Codec services are required only when a schema is executed."
    },
    "examples": [],
    "sourceSpans": [
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 25,
          "column": 1
        },
        "end": {
          "line": 100,
          "column": 2
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 102,
          "column": 1
        },
        "end": {
          "line": 231,
          "column": 2
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 42,
          "column": 3
        },
        "end": {
          "line": 42,
          "column": 30
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 71,
          "column": 3
        },
        "end": {
          "line": 71,
          "column": 28
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 56,
          "column": 3
        },
        "end": {
          "line": 56,
          "column": 20
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 85,
          "column": 3
        },
        "end": {
          "line": 85,
          "column": 57
        }
      },
      {
        "file": "packages/router/src/Route.ts",
        "start": {
          "line": 99,
          "column": 3
        },
        "end": {
          "line": 99,
          "column": 59
        }
      }
    ],
    "since": "1.0.0",
    "category": "Route contracts"
  }
}
