{
  "id": "@typed/router/Matcher#GuardType",
  "canonicalId": "@typed/guard#Guard",
  "symbol": {
    "id": "@typed/router/Matcher#GuardType",
    "packageName": "@typed/router",
    "moduleName": "Matcher",
    "exportName": "GuardType",
    "kind": "type",
    "signatures": [
      "export type GuardType<in I, out O, out E = never, out R = never> = (input: I) => Effect.Effect<Option.Option<O>, E, R>;",
      "export declare namespace GuardType {\n    type Input<T> = [\n        T\n    ] extends [\n        Guard<infer I, infer _R, infer _E, infer _O>\n    ] ? I : [\n        T\n    ] extends [\n        AsGuard<infer I, infer _R, infer _E, infer _O>\n    ] ? I : never;\n    type Services<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer _O, infer _E, infer R>\n    ] ? R : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer _O, infer _E, infer R>\n    ] ? R : never;\n    type Error<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer _O, infer E, infer _R>\n    ] ? E : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer _O, infer E, infer _R>\n    ] ? E : never;\n    type Output<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer O, infer _E, infer _R>\n    ] ? O : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer O, infer _E, infer _R>\n    ] ? O : never;\n}"
    ],
    "summary": "An effectful partial transformation.\n\nA successful `Some` contains a match, a successful `None` means the input did\nnot match, and an Effect failure remains in the `E` channel. Required\nservices remain in `R`.",
    "sections": {
      "Why": "`Guard` models non-match as successful `None`, keeping ordinary dispatch separate from typed failure, defects, and interruption in Effect's Cause.",
      "Ownership and lifetime": "A Guard acquires no resources by itself; each invocation has the lifetime and service requirements of the returned Effect.\n\nSee [Effect Option](https://effect.website/docs/data-types/option/) and [Effect error management](https://effect.website/docs/v4/error-management/expected-errors/)."
    },
    "examples": [
      {
        "language": "ts",
        "code": "import type { Guard } from \"@typed/guard\"\nimport { Effect, Option } from \"effect\"\nconst string: Guard<unknown, string> = (input) => Effect.succeed(typeof input === \"string\" ? Option.some(input) : Option.none())"
      }
    ],
    "relations": [],
    "source": {
      "file": "packages/guard/src/index.ts",
      "line": 45
    },
    "since": "1.0.0",
    "category": "Guard contracts"
  },
  "exposure": {
    "recordKind": "declaration",
    "id": "@typed/router/Matcher#GuardType",
    "packageName": "@typed/router",
    "packageVersion": "1.0.0-beta.7",
    "moduleName": "Matcher",
    "consumerSpecifier": "@typed/router/Matcher",
    "exportName": "GuardType",
    "qualifiedName": "GuardType",
    "declarationKey": "declaration:3eeb832717b9887db1f66fc7",
    "family": "type-alias",
    "signatures": [
      "export type GuardType<in I, out O, out E = never, out R = never> = (input: I) => Effect.Effect<Option.Option<O>, E, R>;",
      "export declare namespace GuardType {\n    type Input<T> = [\n        T\n    ] extends [\n        Guard<infer I, infer _R, infer _E, infer _O>\n    ] ? I : [\n        T\n    ] extends [\n        AsGuard<infer I, infer _R, infer _E, infer _O>\n    ] ? I : never;\n    type Services<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer _O, infer _E, infer R>\n    ] ? R : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer _O, infer _E, infer R>\n    ] ? R : never;\n    type Error<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer _O, infer E, infer _R>\n    ] ? E : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer _O, infer E, infer _R>\n    ] ? E : never;\n    type Output<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer O, infer _E, infer _R>\n    ] ? O : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer O, infer _E, infer _R>\n    ] ? O : never;\n}"
    ],
    "sourceSpans": [
      {
        "file": "packages/guard/src/index.ts",
        "start": {
          "line": 45,
          "column": 1
        },
        "end": {
          "line": 47,
          "column": 44
        }
      },
      {
        "file": "packages/guard/src/index.ts",
        "start": {
          "line": 52,
          "column": 1
        },
        "end": {
          "line": 136,
          "column": 2
        }
      }
    ],
    "aliases": [
      "@typed/guard#Guard",
      "@typed/router#GuardType"
    ],
    "isAlias": true,
    "static": false,
    "importedFrom": "declaration:3eeb832717b9887db1f66fc7"
  },
  "declaration": {
    "declarationKey": "declaration:3eeb832717b9887db1f66fc7",
    "name": "Guard",
    "family": "type-alias",
    "facets": [
      {
        "family": "type-alias",
        "syntaxKind": "TypeAliasDeclaration",
        "signatures": [
          "export type Guard<in I, out O, out E = never, out R = never> = (input: I) => Effect.Effect<Option.Option<O>, E, R>;"
        ],
        "typeParameters": [
          "in I",
          "out O",
          "out E = never",
          "out R = never"
        ],
        "sourceSpans": [
          {
            "file": "packages/guard/src/index.ts",
            "start": {
              "line": 45,
              "column": 1
            },
            "end": {
              "line": 47,
              "column": 44
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      },
      {
        "family": "namespace",
        "syntaxKind": "ModuleDeclaration",
        "signatures": [
          "export declare namespace Guard {\n    type Input<T> = [\n        T\n    ] extends [\n        Guard<infer I, infer _R, infer _E, infer _O>\n    ] ? I : [\n        T\n    ] extends [\n        AsGuard<infer I, infer _R, infer _E, infer _O>\n    ] ? I : never;\n    type Services<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer _O, infer _E, infer R>\n    ] ? R : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer _O, infer _E, infer R>\n    ] ? R : never;\n    type Error<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer _O, infer E, infer _R>\n    ] ? E : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer _O, infer E, infer _R>\n    ] ? E : never;\n    type Output<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer O, infer _E, infer _R>\n    ] ? O : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer O, infer _E, infer _R>\n    ] ? O : never;\n}"
        ],
        "typeParameters": [],
        "sourceSpans": [
          {
            "file": "packages/guard/src/index.ts",
            "start": {
              "line": 52,
              "column": 1
            },
            "end": {
              "line": 136,
              "column": 2
            }
          }
        ],
        "static": false,
        "readonly": false,
        "optional": false
      }
    ],
    "signatures": [
      "export type Guard<in I, out O, out E = never, out R = never> = (input: I) => Effect.Effect<Option.Option<O>, E, R>;",
      "export declare namespace Guard {\n    type Input<T> = [\n        T\n    ] extends [\n        Guard<infer I, infer _R, infer _E, infer _O>\n    ] ? I : [\n        T\n    ] extends [\n        AsGuard<infer I, infer _R, infer _E, infer _O>\n    ] ? I : never;\n    type Services<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer _O, infer _E, infer R>\n    ] ? R : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer _O, infer _E, infer R>\n    ] ? R : never;\n    type Error<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer _O, infer E, infer _R>\n    ] ? E : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer _O, infer E, infer _R>\n    ] ? E : never;\n    type Output<T> = [\n        T\n    ] extends [\n        Guard<infer _I, infer O, infer _E, infer _R>\n    ] ? O : [\n        T\n    ] extends [\n        AsGuard<infer _I, infer O, infer _E, infer _R>\n    ] ? O : never;\n}"
    ],
    "typeParameters": [
      "in I",
      "out O",
      "out E = never",
      "out R = never"
    ],
    "summary": "An effectful partial transformation.\n\nA successful `Some` contains a match, a successful `None` means the input did\nnot match, and an Effect failure remains in the `E` channel. Required\nservices remain in `R`.",
    "sections": {
      "Why": "`Guard` models non-match as successful `None`, keeping ordinary dispatch separate from typed failure, defects, and interruption in Effect's Cause.",
      "Ownership and lifetime": "A Guard acquires no resources by itself; each invocation has the lifetime and service requirements of the returned Effect.\n\nSee [Effect Option](https://effect.website/docs/data-types/option/) and [Effect error management](https://effect.website/docs/v4/error-management/expected-errors/)."
    },
    "examples": [
      {
        "language": "ts",
        "code": "import type { Guard } from \"@typed/guard\"\nimport { Effect, Option } from \"effect\"\nconst string: Guard<unknown, string> = (input) => Effect.succeed(typeof input === \"string\" ? Option.some(input) : Option.none())"
      }
    ],
    "sourceSpans": [
      {
        "file": "packages/guard/src/index.ts",
        "start": {
          "line": 45,
          "column": 1
        },
        "end": {
          "line": 47,
          "column": 44
        }
      },
      {
        "file": "packages/guard/src/index.ts",
        "start": {
          "line": 52,
          "column": 1
        },
        "end": {
          "line": 136,
          "column": 2
        }
      }
    ],
    "since": "1.0.0",
    "category": "Guard contracts"
  }
}
