import { Effect } from "@effect/io/Effect"; import { Opt } from "@effect-ts-app/core/Option"; import { Chunk } from "@fp-ts/data/Chunk"; import { Predicate } from "@fp-ts/data/Predicate"; import { PureEnvEnv } from "@effect-ts-app/boilerplate-prelude/_ext/Pure"; import { NonEmptyReadonlyArray } from "@fp-ts/data/ReadonlyArray"; import type { InvalidStateError, OptimisticConcurrencyException } from "../errors.js"; import { NotFoundError } from "../errors.js"; import type { RequestContext } from "../lib/RequestContext.js"; import { ContextMap } from "../services/Store.js"; import type { Filter } from "../services/Store.js"; import type { FixEnv, PureLogT } from "@effect-ts-app/boilerplate-prelude/_ext/Pure"; import { Pure } from "@effect-ts-app/boilerplate-prelude/_ext/Pure"; import type { ParserEnv } from "@effect-ts-app/schema/custom/Parser"; /** * @tsplus type Repository */ export interface Repository { itemType: ItemType; find: (id: Id) => Effect>; all: Effect>; save: (items: Iterable, events?: Iterable) => Effect; utils: { mapReverse: (pm: PM, setEtag: (id: string, eTag: string | undefined) => void) => unknown; parse: (a: unknown, env?: ParserEnv | undefined) => T; all: Effect>; filter: (filter: Filter, cursor?: { limit?: number; skip?: number; }) => Effect>; }; } export interface PureDSL { get: ReturnType>; set: typeof Pure.set; log: (...w: W[]) => PureLogT; } export declare const AnyPureDSL: PureDSL; /** * @tsplus fluent Repository get * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function get(self: Repository, id: Id): import("@effect/io/Effect").Effect, T>; /** * @tsplus fluent Repository filter * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function filter(self: Repository, filter: Predicate): import("@effect/io/Effect").Effect>; /** * @tsplus fluent Repository filterAll * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function filterAll(self: Repository, map: (items: Chunk) => Chunk): import("@effect/io/Effect").Effect>; /** * @tsplus fluent Repository collect * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function collect(self: Repository, collect: (item: T) => Opt): import("@effect/io/Effect").Effect>; /** * @tsplus getter Repository log * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function log(_: Repository): (evt: Evt) => PureLogT; /** * TODO: project inside the db. * @tsplus fluent Repository projectEffect * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function projectEffect(self: Repository, map: Effect; collect: (t: PM) => Opt; limit?: number; skip?: number; }>): import("@effect/io/Effect").Effect>; /** * TODO: project inside the db. * @tsplus fluent Repository project * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function project(self: Repository, map: { filter?: Filter; collect: (t: PM) => Opt; limit?: number; skip?: number; }): import("@effect/io/Effect").Effect>; /** * @tsplus fluent Repository queryEffect * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function queryEffect(self: Repository, map: Effect; collect: (t: T) => Opt; limit?: number; skip?: number; }>): import("@effect/io/Effect").Effect>; /** * @tsplus fluent Repository queryOneEffect * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function queryOneEffect(self: Repository, map: Effect; collect: (t: T) => Opt; }>): import("@effect/io/Effect").Effect, S>; /** * @tsplus fluent Repository query * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function query(self: Repository, map: { filter?: Filter; collect: (t: T) => Opt; limit?: number; skip?: number; }): import("@effect/io/Effect").Effect>; /** * @tsplus fluent Repository queryOne * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function queryOne(self: Repository, map: { filter?: Filter; collect: (t: T) => Opt; }): import("@effect/io/Effect").Effect, S>; /** * @tsplus fluent Repository queryAndSavePureEffect * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function queryAndSavePureEffect(self: Repository, map: Effect; collect: (t: T) => Opt; limit?: number; skip?: number; }>): (pure: import("@effect/io/Effect").Effect, Iterable>, E2, A>) => import("@effect/io/Effect").Effect, Iterable>; }>, InvalidStateError | OptimisticConcurrencyException | E | E2, A>; /** * @tsplus fluent Repository queryAndSavePure * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function queryAndSavePure(self: Repository, map: { filter: Filter; collect: (t: T) => Opt; limit?: number; skip?: number; }): (pure: import("@effect/io/Effect").Effect, Iterable>, E2, A>) => import("@effect/io/Effect").Effect, Iterable>; }>, InvalidStateError | OptimisticConcurrencyException | E2, A>; /** * @tsplus getter Repository saveManyWithPure * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function saveManyWithPure(self: Repository): (pure: import("@effect/io/Effect").Effect, Iterable>, E, A>) => (items: Iterable) => import("@effect/io/Effect").Effect, Iterable>; }>, InvalidStateError | OptimisticConcurrencyException | E, A>; /** * @tsplus fluent Repository byIdAndSaveWithPure * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function byIdAndSaveWithPure(self: Repository, id: Id): (pure: import("@effect/io/Effect").Effect, E, A>) => import("@effect/io/Effect").Effect; }>, InvalidStateError | OptimisticConcurrencyException | E | NotFoundError, A>; /** * NOTE: it's not as composable, only useful when the request is simple, and only this part needs request args. * @tsplus getter Repository handleByIdAndSaveWithPure * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function handleByIdAndSaveWithPure(self: Repository): (pure: (req: Req, ctx: Context_1) => import("@effect/io/Effect").Effect, E, A>) => (req: Req, ctx: Context_1) => import("@effect/io/Effect").Effect; }>, InvalidStateError | OptimisticConcurrencyException | E | NotFoundError, A>; /** * @tsplus fluent Repository saveManyWithPure_ * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function saveManyWithPure_(self: Repository, items: Iterable, pure: Effect, Iterable>, E, A>): import("@effect/io/Effect").Effect, Iterable>; }>, InvalidStateError | OptimisticConcurrencyException | E, A>; /** * @tsplus fluent Repository saveWithPure_ * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function saveWithPure_(self: Repository, item: S1, pure: Effect, E, A>): import("@effect/io/Effect").Effect; }>, InvalidStateError | OptimisticConcurrencyException | E, A>; export type AllDSL = ((pure: (dsl: PureDSL, Iterable, Evt>) => Effect) => Effect, Iterable>, E, A>) & AllDSLExt; /** * @tsplus type DSLExt */ export interface AllDSLExt { modify: (pure: (items: Chunk, dsl: PureDSL, Iterable, Evt>) => Effect) => Effect, Iterable>, E, A>; update: (pure: (items: Chunk, log: (...evt: Evt[]) => PureLogT) => Effect>) => Effect, Iterable>, E, Iterable>; } export declare function makeAllDSL(): AllDSL; export type OneDSL = ((pure: (dsl: PureDSL) => Effect, E, A>) => Effect, E, A>) & OneDSLExt; /** * @tsplus type DSLExt */ export interface OneDSLExt { modify: (pure: (items: S1, dsl: PureDSL) => Effect, E, A>) => Effect | PureEnvEnv, E, A>; update: (pure: (items: S1, log: (...evt: Evt[]) => PureLogT) => Effect, E, S2>) => Effect, E, S2>; } /** * @tsplus fluent DSLExt updateWith * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function updateWithOne(self: OneDSL, upd: (item: S1) => S2): import("@effect/io/Effect").Effect, never, S2>; /** * @tsplus fluent DSLExt updateWith * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function updateWith(self: AllDSL, upd: (item: Chunk) => Iterable): import("@effect/io/Effect").Effect, Iterable>, never, Iterable>; export declare function makeOneDSL(): OneDSL; export declare function makeDSL(): ((pure: (dsl: PureDSL) => import("@effect/io/Effect").Effect) => import("@effect/io/Effect").Effect, E, A>) & { modify: (pure: (items: S1, dsl: PureDSL) => import("@effect/io/Effect").Effect) => import("@effect/io/Effect").Effect, E_1, A_1>; update: (pure: (items: S1, log: (...evt: Evt[]) => PureLogT) => import("@effect/io/Effect").Effect) => import("@effect/io/Effect").Effect, E_2, S2>; }; export interface DSLExt extends ReturnType> { } export declare function ifAny(fn: (items: NonEmptyReadonlyArray) => Effect): (items: Iterable) => import("@effect/io/Effect").Effect>; /** * @tsplus fluent Iterable ifAny * @tsplus location "@effect-ts-app/boilerplate-infra/services/Repository" */ export declare function ifAny_(items: Iterable, fn: (items: NonEmptyReadonlyArray) => Effect): import("@effect/io/Effect").Effect>; //# sourceMappingURL=Repository.d.ts.map