import type { Cache } from './Cache'; import type { DataSource } from './DataSource'; import type { DataSourceAspect } from './DataSourceAspect'; import type { Result } from './internal/Result'; import type { AnyRequest } from './Request'; import type { Has, Tag } from '@principia/base/Has'; import type { IO } from '@principia/base/IO'; import type { _A, _E } from '@principia/base/prelude'; import type * as P from '@principia/base/prelude'; import * as E from '@principia/base/Either'; import * as I from '@principia/base/IO'; import * as Ca from '@principia/base/IO/Cause'; import * as L from '@principia/base/Layer'; import * as M from '@principia/base/Maybe'; import { Described } from './Described'; import { QueryContext } from './internal/QueryContext'; export declare const QueryTypeId: unique symbol; export declare type QueryTypeId = typeof QueryTypeId; /** * A `Query` is a purely functional description of an effectual query * that may contain requests from one or more data sources, requires an * environment `R`, and may fail with an `E` or succeed with an `A`. * * Requests that can be performed in parallel, as expressed by `map2Par` and * combinators derived from it, will automatically be batched. Requests that * must be performed sequentially, as expressed by `map2` and combinators * derived from it, will automatically be pipelined. This allows for aggressive * data source specific optimizations. Requests can also be deduplicated and * cached. * * This allows for writing queries in a high level, compositional style, with * confidence that they will automatically be optimized. */ export declare class Query { readonly step: IO>; readonly [QueryTypeId]: QueryTypeId; constructor(step: IO>); } export declare function isQuery(u: unknown): u is Query; /** * Returns an effect that models executing this query with the specified * context. */ export declare function runContext_(ma: Query, queryContext: QueryContext): I.IO; /** * Returns an effect that models executing this query with the specified * context. */ export declare function runContext(queryContext: QueryContext): (ma: Query) => I.IO; /** * Returns an effect that models executing this query with the specified * cache. */ export declare function runCache_(ma: Query, cache: Cache): I.IO; /** * Returns an effect that models executing this query with the specified * cache. */ export declare function runCache(cache: Cache): (ma: Query) => I.IO; /** * Returns an effect that models executing this query, returning the query * result along with the cache. */ export declare function runLog(ma: Query): I.IO; export declare function run(ma: Query): I.IO; /** * Recovers from all errors with provided Cause. */ export declare function catchAllCause_(ma: Query, h: (cause: Ca.Cause) => Query): Query; /** * Recovers from all errors with provided Cause. */ export declare function catchAllCause(h: (cause: Ca.Cause) => Query): (ma: Query) => Query; /** * Recovers from all errors. */ export declare function catchAll_(ma: Query, h: (e: E) => Query): Query; /** * Recovers from all errors. */ export declare function catchAll(h: (e: E) => Query): (ma: Query) => Query; /** * A more powerful version of `matchM` that allows recovering from any type * of failure except interruptions. */ export declare function matchCauseQuery_(ma: Query, onFailure: (cause: Ca.Cause) => Query, onSuccess: (a: A) => Query): Query; /** * A more powerful version of `matchM` that allows recovering from any type * of failure except interruptions. */ export declare function matchCauseQuery(onFailure: (cause: Ca.Cause) => Query, onSuccess: (a: A) => Query): (ma: Query) => Query; /** * Recovers from errors by accepting one query to execute for the case of an * error, and one query to execute for the case of success. */ export declare function matchQuery_(ma: Query, onFailure: (error: E) => Query, onSuccess: (a: A) => Query): Query; /** * Recovers from errors by accepting one query to execute for the case of an * error, and one query to execute for the case of success. */ export declare function matchQuery(onFailure: (error: E) => Query, onSuccess: (a: A) => Query): (ma: Query) => Query; /** * Folds over the failed or successful result of this query to yield a query * that does not fail, but succeeds with the value returned by the left or * right function passed to `fold`. */ export declare function match_(ma: Query, onFailure: (error: E) => B, onSuccess: (a: A) => C): Query; /** * Folds over the failed or successful result of this query to yield a query * that does not fail, but succeeds with the value returned by the left or * right function passed to `fold`. */ export declare function match(onFailure: (error: E) => B, onSuccess: (a: A) => C): (ma: Query) => Query; export declare function ap_(fab: Query B>, fa: Query): Query; export declare function ap(fa: Query): (fab: Query B>) => Query; export declare function crossFirst_(fa: Query, fb: Query): Query; export declare function crossFirst(fb: Query): (fa: Query) => Query; export declare function crossSecond_(fa: Query, fb: Query): Query; export declare function crossSecond(fb: Query): (fa: Query) => Query; export declare function crossWith_(fa: Query, fb: Query, f: (a: A, b: B) => C): Query; export declare function crossWith(fb: Query, f: (a: A, b: B) => C): (fa: Query) => Query; export declare function cross_(fa: Query, fb: Query): Query; export declare function cross(fb: Query): (fa: Query) => Query; export declare function apC_(fab: Query B>, fa: Query): Query; export declare function apC(fa: Query): (fab: Query B>) => Query; export declare function apFirstC_(fa: Query, fb: Query): Query; export declare function apFirstC(fb: Query): (fa: Query) => Query; export declare function apSecondC_(fa: Query, fb: Query): Query; export declare function apSecondC(fb: Query): (fa: Query) => Query; export declare function crossWithC_(fa: Query, fb: Query, f: (a: A, b: B) => C): Query; export declare function crossWithC(fb: Query, f: (a: A, b: B) => C): (fa: Query) => Query; export declare function crossC_(fa: Query, fb: Query): Query; export declare function crossC(fb: Query): (fa: Query) => Query; export declare function apBatched_(fab: Query B>, fa: Query): Query; export declare function apBatched(fa: Query): (fab: Query B>) => Query; export declare function apFirstBatched_(fa: Query, fb: Query): Query; export declare function apFirstBatched(fb: Query): (fa: Query) => Query; export declare function apSecondBatched_(fa: Query, fb: Query): Query; export declare function apSecondBatched(fb: Query): (fa: Query) => Query; export declare function crossWithBatched_(fa: Query, fb: Query, f: (a: A, b: B) => C): Query; export declare function crossWithBatched(fb: Query, f: (a: A, b: B) => C): (fa: Query) => Query; export declare function crossBatched_(fa: Query, fb: Query): Query; export declare function crossBatched(fb: Query): (fa: Query) => Query; export declare function bimap_(pab: Query, f: (e: E) => E1, g: (a: A) => B): Query; export declare function bimap(f: (e: E) => E1, g: (a: A) => B): (pab: Query) => Query; export declare function mapError_(pab: Query, f: (e: E) => E1): Query; export declare function mapError(f: (e: E) => E1): (pab: Query) => Query; export declare function mapErrorCause_(pab: Query, h: (cause: Ca.Cause) => Ca.Cause): Query; export declare function mapErrorCause(h: (cause: Ca.Cause) => Ca.Cause): (pab: Query) => Query; export declare function subsumeEither(v: Query>): Query; export declare function either(ma: Query): Query>; export declare function as_(fa: Query, b: B): Query; export declare function as(b: B): (fa: Query) => Query; export declare function map_(fa: Query, f: (a: A) => B): Query; export declare function map(f: (a: A) => B): (fa: Query) => Query; export declare function mapDataSources_(fa: Query, f: DataSourceAspect): Query; export declare function mapDataSources(f: DataSourceAspect): (fa: Query) => Query; export declare function defer(query: () => Query): Query; export declare function halt(error: unknown): Query; export declare function fail(error: E): Query; export declare function fromIO(effect: IO): Query; export declare function fromEither(either: E.Either): Query; export declare function fromOption(option: M.Maybe): Query, A>; export declare function fromRequest(request: A, dataSource: DataSource): Query, _A>; export declare function fromRequestUncached(request: A, dataSource: DataSource): Query, _A>; export declare function failCause(cause: Ca.Cause): Query; export declare const never: Query; export declare function nothing(): Query>; export declare function succeed(value: A): Query; export declare function just(a: A): Query>; export declare function chain_(ma: Query, f: (a: A) => Query): Query; export declare function chain(f: (a: A) => Query): (ma: Query) => Query; export declare function flatten(mma: Query>): Query; export declare function ask(): Query; export declare function asks(f: (_: R) => A): Query; export declare function asksQuery(f: (_: R0) => Query): Query; export declare function gives_(ra: Query, f: Described<(r0: R0) => R>): Query; export declare function gives(f: Described<(r0: R0) => R>): (ra: Query) => Query; export declare function give_(ra: Query, r: Described): Query; export declare function give(r: Described): (ra: Query) => Query; export declare function giveSome_(ra: Query, r: Described): Query; export declare function giveSome(r: Described): (ra: Query) => Query; export declare function giveSomeLayer_(ra: Query, layer: Described>): Query; export declare function giveSomeLayer(layer: Described>): (ra: Query) => Query; export declare function giveServiceIO_(_: Tag): (ma: Query, E, A>, f: Described>) => Query; export declare function giveServiceIO(_: Tag): (f: Described>) => (ma: Query, E1, A1>) => Query; export declare function giveService_(_: Tag): (ma: Query, E, A>, f: Described) => Query; export declare function giveService(_: Tag): (f: Described) => (ma: Query, E1, A1>) => Query; export declare function partitionQuery_(as: Iterable, f: (a: A) => Query): Query, ReadonlyArray]>; export declare function partitionQuery(f: (a: A) => Query): (as: Iterable) => Query, ReadonlyArray]>; export declare function partitonParQuery_(as: Iterable, f: (a: A) => Query): Query, ReadonlyArray]>; export declare function partitionParQuery(f: (a: A) => Query): (as: Iterable) => Query, ReadonlyArray]>; export declare function cached(ma: Query): Query; export declare function ensuring_(ma: Query, finalizer: Query): Query; export declare function foreach_(as: Iterable, f: (a: A) => Query): Query>; export declare function foreach(f: (a: A) => Query): (as: Iterable) => Query>; export declare function foreachC_(as: Iterable, f: (a: A) => Query): Query>; export declare function foreachC(f: (a: A) => Query): (as: Iterable) => Query>; export declare function foreachBatched_(as: Iterable, f: (a: A) => Query): Query>; export declare function foreachBatched(f: (a: A) => Query): (as: Iterable) => Query>; export declare function getError(ma: Query, A>): Query>; export declare function get(ma: Query>): Query, A>; export declare function getOrFail_(ma: Query>, e: E1): Query; export declare function getOrFail(e: E1): (ma: Query>) => Query; export declare function left(ma: Query>): Query, A>; export declare function right(ma: Query>): Query, B>; export declare function leftOrFail_(ma: Query>, e: E1): Query; export declare function leftOrFail(e: E1): (ma: Query>) => Query; export declare function leftOrFailWith_(ma: Query>, f: (right: B) => E1): Query; export declare function leftOrFailWith(f: (right: B) => E1): (ma: Query>) => Query; export declare function optional(ma: Query): Query>; export declare function orHaltWith_(ma: Query, f: (e: E) => unknown): Query; export declare function orHaltWith(f: (e: E) => unknown): (ma: Query) => Query; export declare function orHalt(ma: Query): Query; export declare function refineOrHalt_(ma: Query, pf: (e: E) => M.Maybe): Query; export declare function refineOrHalt(pf: (e: E) => M.Maybe): (ma: Query) => Query; export declare function refineOrHaltWith_(ma: Query, pf: (e: E) => M.Maybe, f: (e: E) => unknown): Query; export declare function refineOrHaltWith(pf: (e: E) => M.Maybe, f: (e: E) => unknown): (ma: Query) => Query; export declare function rightOrFail_(ma: Query>, e: E1): Query; export declare function rightOrFail(e: E1): (ma: Query>) => Query; export declare function rightOrFailWith_(ma: Query>, f: (left: A) => E1): Query; export declare function rightOrFailWith(f: (left: A) => E1): (ma: Query>) => Query; export declare function sandbox(ma: Query): Query, A>; export declare function unsandbox(v: Query, A>): Query; export declare function sandboxWith_(ma: Query, f: (query: Query, A>) => Query, B>): Query; export declare function sandboxWith(f: (query: Query, A>) => Query, B>): (ma: Query) => Query; export declare function summarized_(ma: Query, summary: I.IO, f: (start: B, end: B) => C): Query; export declare function summarized(summary: I.IO, f: (start: B, end: B) => C): (ma: Query) => Query; export declare function unrefineWith_(ma: Query, pf: (error: unknown) => M.Maybe, f: (e: E) => E1): Query; export declare function unrefineWith(pf: (error: unknown) => M.Maybe, f: (e: E) => E1): (ma: Query) => Query; export declare function unrefine_(ma: Query, pf: (error: unknown) => M.Maybe): Query; export declare function unrefine(pf: (error: unknown) => M.Maybe): (ma: Query) => Query; export declare class GenQuery { readonly Q: Query; readonly _R: (_: R) => void; readonly _E: () => E; readonly _A: () => A; constructor(Q: Query); [Symbol.iterator](): Generator, A, any>; } export declare function gen, A>(f: (i: { (_: Query): GenQuery; (_: IO): GenQuery; }) => Generator): Query, P._E, A>; //# sourceMappingURL=Query.d.ts.map