/** * @since 1.0.0 */ import * as Context from "effect/Context"; import type * as Effect from "effect/Effect"; import * as Schema from "effect/Schema"; import type { Simplify } from "effect/Types"; import type * as HttpApiSecurity from "./HttpApiSecurity.js"; import type * as HttpRouter from "./HttpRouter.js"; /** * @since 1.0.0 * @category type ids */ export declare const TypeId: unique symbol; /** * @since 1.0.0 * @category type ids */ export type TypeId = typeof TypeId; /** * @since 1.0.0 * @category type ids */ export declare const SecurityTypeId: unique symbol; /** * @since 1.0.0 * @category type ids */ export type SecurityTypeId = typeof SecurityTypeId; /** * @since 1.0.0 * @category guards */ export declare const isSecurity: (u: TagClassAny) => u is TagClassSecurityAny; /** * @since 1.0.0 * @category models */ export interface HttpApiMiddleware extends Effect.Effect { } /** * @since 1.0.0 * @category models */ export type HttpApiMiddlewareSecurity, Provides, E> = { readonly [K in keyof Security]: (_: HttpApiSecurity.HttpApiSecurity.Type) => Effect.Effect; }; /** * @since 1.0.0 * @category models */ export declare namespace HttpApiMiddleware { /** * @since 1.0.0 * @category models */ interface Any { readonly [TypeId]: TypeId; } /** * @since 1.0.0 * @category models */ interface AnyId { readonly [TypeId]: { readonly provides: any; }; } /** * @since 1.0.0 * @category models */ type Provides = A extends { readonly [TypeId]: { readonly provides: infer P; }; } ? P : never; /** * @since 1.0.0 * @category models */ type ExtractProvides = Provides>; /** * @since 1.0.0 * @category models */ type Error = A extends { readonly [TypeId]: { readonly failure: infer E; }; } ? E : never; /** * @since 1.0.0 * @category models */ type ErrorContext = A extends { readonly [TypeId]: { readonly failureContext: infer R; }; } ? R : never; /** * @since 1.0.0 * @category models */ type Only = Extract; /** * @since 1.0.0 * @category models */ type Without = Exclude; } /** * @since 1.0.0 * @category models */ export type TagClass = Options extends { readonly security: Record; } ? TagClass.BaseSecurity, TagClass.FailureService>>, Options["security"]> : TagClass.Base, TagClass.FailureService>>; /** * @since 1.0.0 * @category models */ export declare namespace TagClass { /** * @since 1.0.0 * @category models */ type Provides = Options extends { readonly provides: Context.Tag; readonly optional?: false; } ? Context.Tag.Identifier : never; /** * @since 1.0.0 * @category models */ type Service = Options extends { readonly provides: Context.Tag; } ? Context.Tag.Service : void; /** * @since 1.0.0 * @category models */ type FailureSchema = Options extends { readonly failure: Schema.Schema.All; readonly optional?: false; } ? Options["failure"] : typeof Schema.Never; /** * @since 1.0.0 * @category models */ type Failure = Options extends { readonly failure: Schema.Schema; readonly optional?: false; } ? _A : never; /** * @since 1.0.0 * @category models */ type FailureContext = Schema.Schema.Context>; /** * @since 1.0.0 * @category models */ type FailureService = Optional extends true ? unknown : Failure; /** * @since 1.0.0 * @category models */ type Optional = Options extends { readonly optional: true; } ? true : false; /** * @since 1.0.0 * @category models */ interface Base extends Context.Tag { new (_: never): Context.TagClassShape & { readonly [TypeId]: { readonly provides: Provides; readonly failure: Failure; readonly failureContext: FailureContext; }; }; readonly [TypeId]: TypeId; readonly optional: Optional; readonly failure: FailureSchema; readonly provides: Options extends { readonly provides: Context.Tag; } ? Options["provides"] : undefined; } /** * @since 1.0.0 * @category models */ interface BaseSecurity> extends Base { readonly [SecurityTypeId]: SecurityTypeId; readonly security: Security; } } /** * @since 1.0.0 * @category models */ export interface TagClassAny extends Context.Tag { readonly [TypeId]: TypeId; readonly optional: boolean; readonly provides?: Context.Tag; readonly failure: Schema.Schema.All; } /** * @since 1.0.0 * @category models */ export interface TagClassSecurityAny extends TagClassAny { readonly [SecurityTypeId]: SecurityTypeId; readonly security: Record; } /** * @since 1.0.0 * @category tags */ export declare const Tag: () => ; readonly security?: Record; }>(id: Name, options?: Options | undefined) => TagClass; //# sourceMappingURL=HttpApiMiddleware.d.ts.map