/** * @since 1.0.0 */ import type * as Data from "@effect/data/Data" import type * as Either from "@effect/data/Either" import type * as Option from "@effect/data/Option" import type * as Effect from "@effect/io/Effect" import type * as CompletedRequestMap from "@effect/query/CompletedRequestMap" import * as internal from "@effect/query/internal_effect_untraced/request" /** * @since 1.0.0 * @category symbols */ export const RequestTypeId: unique symbol = internal.RequestTypeId /** * @since 1.0.0 * @category symbols */ export type RequestTypeId = typeof RequestTypeId /** * A `Request` is a request from a data source for a value of type `A` * that may fail with an `E`. * * @since 1.0.0 * @category models */ export interface Request extends Request.Variance, Data.Case {} /** * @since 1.0.0 */ export declare namespace Request { /** * @since 1.0.0 * @category models */ export interface Variance { readonly [RequestTypeId]: { readonly _E: (_: never) => E readonly _A: (_: never) => A } } /** * @since 1.0.0 * @category models */ export interface Constructor, T extends keyof R = never> { (args: Omit, Request.Success>)>): R } /** * A utility type to extract the error type from a `Request`. * * @since 1.0.0 * @category type-level */ export type Error> = [T] extends [Request] ? _E : never /** * A utility type to extract the value type from a `Request`. * * @since 1.0.0 * @category type-level */ export type Success> = [T] extends [Request] ? _A : never /** * A utility type to extract the result type from a `Request`. * * @since 1.0.0 * @category type-level */ export type Result> = T extends Request ? Either.Either : never /** * A utility type to extract the optional result type from a `Request`. * * @since 1.0.0 * @category type-level */ export type OptionalResult> = T extends Request ? Either.Either> : never } /** * Returns `true` if the specified value is a `Request`, `false` otherwise. * * @since 1.0.0 * @category refinements */ export const isRequest: (u: unknown) => u is Request = internal.isRequest /** * Constructs a new `Request`. * * @since 1.0.0 * @category constructors */ export const of: >() => Request.Constructor = internal.of /** * Constructs a new `Request`. * * @since 1.0.0 * @category constructors */ export const tagged: & { _tag: string }>( tag: R["_tag"] ) => Request.Constructor = internal.tagged /** * Complete a `Request` with the specified result. * * @since 1.0.0 * @category request completion */ export const complete: { >( result: Request.Result ): (self: A) => Effect.Effect >( self: A, result: Request.Result ): Effect.Effect } = internal.complete /** * Complete a `Request` with the specified effectful computation, failing the * request with the error from the effect workflow if it fails, and completing * the request with the value of the effect workflow if it succeeds. * * @since 1.0.0 * @category request completion */ export const completeEffect: { , R>( effect: Effect.Effect, Request.Success> ): (self: A) => Effect.Effect , R>( self: A, effect: Effect.Effect, Request.Success> ): Effect.Effect } = internal.completeEffect /** * Complete a `Request` with the specified error. * * @since 1.0.0 * @category request completion */ export const fail: { >( error: Request.Error ): (self: A) => Effect.Effect >( self: A, error: Request.Error ): Effect.Effect } = internal.fail /** * Complete a `Request` with the specified value. * * @since 1.0.0 * @category request completion */ export const succeed: { >( value: Request.Success ): (self: A) => Effect.Effect >( self: A, value: Request.Success ): Effect.Effect } = internal.succeed