{
  "id": "@typed/router/Uri#Uri",
  "canonicalId": "@typed/router/Uri#Uri",
  "symbol": {
    "id": "@typed/router/Uri#Uri",
    "packageName": "@typed/router",
    "moduleName": "Uri",
    "exportName": "Uri",
    "kind": "interface",
    "signatures": [
      "export interface Uri<Protocol extends string = string, Username extends string = \"\", Password extends string = \"\", Hostname extends string = string, Port extends number | \"\" = \"\", Pathname extends string = \"/\", Query extends string = \"\", Hash extends string = \"\"> {\n    readonly protocol: Protocol;\n    readonly username: Username;\n    readonly password: Password;\n    readonly hostname: Hostname;\n    readonly port: Port;\n    readonly pathname: Pathname;\n    readonly query: Query;\n    readonly hash: Hash;\n}",
      "export declare namespace Uri {\n    type Any = Uri<string, string, string, string, number | \"\", string, string, string>;\n}"
    ],
    "summary": "A type-level URI component record.",
    "sections": {
      "Why": "Parsing and formatting share one explicit protocol, authentication, host, path, query, and hash shape.",
      "Ownership and lifetime": "`Uri` is a compile-time component record. Supplying its type arguments creates no runtime URL object or retained input.",
      "Property: hash": "The URI fragment component without its leading hash.",
      "Property: hash: Why": "Formatting controls delimiters while preserving the literal fragment payload.",
      "Property: hash: Ownership and lifetime": "The `Uri.hash` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: hostname": "The URI host-name component.",
      "Property: hostname: Why": "Base-URI application can inherit host identity independently of path/query/hash.",
      "Property: hostname: Ownership and lifetime": "The `Uri.hostname` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: password": "The URI authentication password component.",
      "Property: password: Why": "Authentication formatting can preserve an explicitly empty or literal password.",
      "Property: password: Ownership and lifetime": "The `Uri.password` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: pathname": "The URI pathname component.",
      "Property: pathname: Why": "Relative input can replace the base path without changing inherited origin components.",
      "Property: pathname: Ownership and lifetime": "The `Uri.pathname` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: port": "The numeric port component or an absent empty string.",
      "Property: port: Why": "Formatting adds a colon only when a port exists.",
      "Property: port: Ownership and lifetime": "The `Uri.port` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: protocol": "The URI scheme component.",
      "Property: protocol: Why": "Formatting normalizes its colon and double-slash delimiters.",
      "Property: protocol: Ownership and lifetime": "The `Uri.protocol` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: query": "The URI query component without its leading question mark.",
      "Property: query: Why": "Formatting controls delimiters while preserving the literal query payload.",
      "Property: query: Ownership and lifetime": "The `Uri.query` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: username": "The URI authentication username component.",
      "Property: username: Why": "Authentication formatting remains separate from host and path.",
      "Property: username: Ownership and lifetime": "The `Uri.username` component is carried only as a type argument on `Uri`; no runtime field or resource exists."
    },
    "examples": [],
    "relations": [],
    "source": {
      "file": "packages/router/src/Uri.ts",
      "line": 54
    },
    "since": "1.0.0",
    "category": "URI type inference"
  },
  "exposure": {
    "recordKind": "declaration",
    "id": "@typed/router/Uri#Uri",
    "packageName": "@typed/router",
    "packageVersion": "1.0.0-beta.13",
    "moduleName": "Uri",
    "consumerSpecifier": "@typed/router/Uri",
    "exportName": "Uri",
    "qualifiedName": "Uri",
    "declarationKey": "declaration:1ff8ff0c560004366ae3e1e2",
    "family": "interface",
    "signatures": [
      "export interface Uri<Protocol extends string = string, Username extends string = \"\", Password extends string = \"\", Hostname extends string = string, Port extends number | \"\" = \"\", Pathname extends string = \"/\", Query extends string = \"\", Hash extends string = \"\"> {\n    readonly protocol: Protocol;\n    readonly username: Username;\n    readonly password: Password;\n    readonly hostname: Hostname;\n    readonly port: Port;\n    readonly pathname: Pathname;\n    readonly query: Query;\n    readonly hash: Hash;\n}",
      "export declare namespace Uri {\n    type Any = Uri<string, string, string, string, number | \"\", string, string, string>;\n}"
    ],
    "sourceSpans": [
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 54,
          "column": 1
        },
        "end": {
          "line": 176,
          "column": 2
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 181,
          "column": 1
        },
        "end": {
          "line": 196,
          "column": 2
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 175,
          "column": 3
        },
        "end": {
          "line": 175,
          "column": 23
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 119,
          "column": 3
        },
        "end": {
          "line": 119,
          "column": 31
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 105,
          "column": 3
        },
        "end": {
          "line": 105,
          "column": 31
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 147,
          "column": 3
        },
        "end": {
          "line": 147,
          "column": 31
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 133,
          "column": 3
        },
        "end": {
          "line": 133,
          "column": 23
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 77,
          "column": 3
        },
        "end": {
          "line": 77,
          "column": 31
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 161,
          "column": 3
        },
        "end": {
          "line": 161,
          "column": 25
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 91,
          "column": 3
        },
        "end": {
          "line": 91,
          "column": 31
        }
      }
    ],
    "aliases": [],
    "isAlias": false,
    "static": false
  },
  "declaration": {
    "declarationKey": "declaration:1ff8ff0c560004366ae3e1e2",
    "name": "Uri",
    "family": "interface",
    "facets": [
      {
        "family": "interface",
        "syntaxKind": "InterfaceDeclaration",
        "signatures": [
          "export interface Uri<Protocol extends string = string, Username extends string = \"\", Password extends string = \"\", Hostname extends string = string, Port extends number | \"\" = \"\", Pathname extends string = \"/\", Query extends string = \"\", Hash extends string = \"\"> {\n    readonly protocol: Protocol;\n    readonly username: Username;\n    readonly password: Password;\n    readonly hostname: Hostname;\n    readonly port: Port;\n    readonly pathname: Pathname;\n    readonly query: Query;\n    readonly hash: Hash;\n}"
        ],
        "typeParameters": [
          "Protocol extends string = string",
          "Username extends string = \"\"",
          "Password extends string = \"\"",
          "Hostname extends string = string",
          "Port extends number | \"\" = \"\"",
          "Pathname extends string = \"/\"",
          "Query extends string = \"\"",
          "Hash extends string = \"\""
        ],
        "sourceSpans": [
          {
            "file": "packages/router/src/Uri.ts",
            "start": {
              "line": 54,
              "column": 1
            },
            "end": {
              "line": 176,
              "column": 2
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      },
      {
        "family": "namespace",
        "syntaxKind": "ModuleDeclaration",
        "signatures": [
          "export declare namespace Uri {\n    type Any = Uri<string, string, string, string, number | \"\", string, string, string>;\n}"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Uri.ts",
            "start": {
              "line": 181,
              "column": 1
            },
            "end": {
              "line": 196,
              "column": 2
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly hash: Hash;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Uri.ts",
            "start": {
              "line": 175,
              "column": 3
            },
            "end": {
              "line": 175,
              "column": 23
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly hostname: Hostname;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Uri.ts",
            "start": {
              "line": 119,
              "column": 3
            },
            "end": {
              "line": 119,
              "column": 31
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly password: Password;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Uri.ts",
            "start": {
              "line": 105,
              "column": 3
            },
            "end": {
              "line": 105,
              "column": 31
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly pathname: Pathname;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Uri.ts",
            "start": {
              "line": 147,
              "column": 3
            },
            "end": {
              "line": 147,
              "column": 31
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly port: Port;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Uri.ts",
            "start": {
              "line": 133,
              "column": 3
            },
            "end": {
              "line": 133,
              "column": 23
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly protocol: Protocol;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Uri.ts",
            "start": {
              "line": 77,
              "column": 3
            },
            "end": {
              "line": 77,
              "column": 31
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly query: Query;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Uri.ts",
            "start": {
              "line": 161,
              "column": 3
            },
            "end": {
              "line": 161,
              "column": 25
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      },
      {
        "family": "property",
        "syntaxKind": "PropertySignature",
        "signatures": [
          "readonly username: Username;"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/router/src/Uri.ts",
            "start": {
              "line": 91,
              "column": 3
            },
            "end": {
              "line": 91,
              "column": 31
            }
          }
        ],
        "static": false,
        "readonly": true,
        "optional": false
      }
    ],
    "signatures": [
      "export interface Uri<Protocol extends string = string, Username extends string = \"\", Password extends string = \"\", Hostname extends string = string, Port extends number | \"\" = \"\", Pathname extends string = \"/\", Query extends string = \"\", Hash extends string = \"\"> {\n    readonly protocol: Protocol;\n    readonly username: Username;\n    readonly password: Password;\n    readonly hostname: Hostname;\n    readonly port: Port;\n    readonly pathname: Pathname;\n    readonly query: Query;\n    readonly hash: Hash;\n}",
      "export declare namespace Uri {\n    type Any = Uri<string, string, string, string, number | \"\", string, string, string>;\n}"
    ],
    "typeParameters": [
      "Protocol extends string = string",
      "Username extends string = \"\"",
      "Password extends string = \"\"",
      "Hostname extends string = string",
      "Port extends number | \"\" = \"\"",
      "Pathname extends string = \"/\"",
      "Query extends string = \"\"",
      "Hash extends string = \"\""
    ],
    "summary": "A type-level URI component record.",
    "sections": {
      "Why": "Parsing and formatting share one explicit protocol, authentication, host, path, query, and hash shape.",
      "Ownership and lifetime": "`Uri` is a compile-time component record. Supplying its type arguments creates no runtime URL object or retained input.",
      "Property: hash": "The URI fragment component without its leading hash.",
      "Property: hash: Why": "Formatting controls delimiters while preserving the literal fragment payload.",
      "Property: hash: Ownership and lifetime": "The `Uri.hash` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: hostname": "The URI host-name component.",
      "Property: hostname: Why": "Base-URI application can inherit host identity independently of path/query/hash.",
      "Property: hostname: Ownership and lifetime": "The `Uri.hostname` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: password": "The URI authentication password component.",
      "Property: password: Why": "Authentication formatting can preserve an explicitly empty or literal password.",
      "Property: password: Ownership and lifetime": "The `Uri.password` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: pathname": "The URI pathname component.",
      "Property: pathname: Why": "Relative input can replace the base path without changing inherited origin components.",
      "Property: pathname: Ownership and lifetime": "The `Uri.pathname` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: port": "The numeric port component or an absent empty string.",
      "Property: port: Why": "Formatting adds a colon only when a port exists.",
      "Property: port: Ownership and lifetime": "The `Uri.port` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: protocol": "The URI scheme component.",
      "Property: protocol: Why": "Formatting normalizes its colon and double-slash delimiters.",
      "Property: protocol: Ownership and lifetime": "The `Uri.protocol` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: query": "The URI query component without its leading question mark.",
      "Property: query: Why": "Formatting controls delimiters while preserving the literal query payload.",
      "Property: query: Ownership and lifetime": "The `Uri.query` component is carried only as a type argument on `Uri`; no runtime field or resource exists.",
      "Property: username": "The URI authentication username component.",
      "Property: username: Why": "Authentication formatting remains separate from host and path.",
      "Property: username: Ownership and lifetime": "The `Uri.username` component is carried only as a type argument on `Uri`; no runtime field or resource exists."
    },
    "examples": [],
    "sourceSpans": [
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 54,
          "column": 1
        },
        "end": {
          "line": 176,
          "column": 2
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 181,
          "column": 1
        },
        "end": {
          "line": 196,
          "column": 2
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 175,
          "column": 3
        },
        "end": {
          "line": 175,
          "column": 23
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 119,
          "column": 3
        },
        "end": {
          "line": 119,
          "column": 31
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 105,
          "column": 3
        },
        "end": {
          "line": 105,
          "column": 31
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 147,
          "column": 3
        },
        "end": {
          "line": 147,
          "column": 31
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 133,
          "column": 3
        },
        "end": {
          "line": 133,
          "column": 23
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 77,
          "column": 3
        },
        "end": {
          "line": 77,
          "column": 31
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 161,
          "column": 3
        },
        "end": {
          "line": 161,
          "column": 25
        }
      },
      {
        "file": "packages/router/src/Uri.ts",
        "start": {
          "line": 91,
          "column": 3
        },
        "end": {
          "line": 91,
          "column": 31
        }
      }
    ],
    "since": "1.0.0",
    "category": "URI type inference"
  }
}
