import * as Chunk from "effect/Chunk"; import * as Data from "effect/Data"; import * as Option from "effect/Option"; import * as Result from "effect/Result"; import * as Schema from "effect/Schema"; import type * as QueryStreamKey from "./QueryStreamKey"; declare const PageSize: Schema.brand; type PageSize = typeof PageSize.Type; declare const InvalidPageSizeError_base: new = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & { readonly _tag: "InvalidPageSizeError"; } & Readonly; /** * @experimental */ export declare class InvalidPageSizeError extends InvalidPageSizeError_base<{ readonly numItems: number; }> { get message(): string; } declare const EmptyInitialPageError_base: new = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & { readonly _tag: "EmptyInitialPageError"; } & Readonly; /** * @experimental */ export declare class EmptyInitialPageError extends EmptyInitialPageError_base { get message(): string; } /** * @experimental */ export type Range = Data.TaggedEnum<{ Unpinned: {}; ThroughKey: { readonly key: QueryStreamKey.Complete; }; ThroughEnd: {}; }>; /** * @experimental */ export declare const Range: { readonly $is: (tag: Tag) => (u: unknown) => u is Extract<{ readonly _tag: "ThroughEnd"; }, { readonly _tag: Tag; }> | Extract<{ readonly _tag: "ThroughKey"; readonly key: QueryStreamKey.Complete; }, { readonly _tag: Tag; }> | Extract<{ readonly _tag: "Unpinned"; }, { readonly _tag: Tag; }>; readonly $match: { ) => any; }>(cases: Cases): (value: { readonly _tag: "ThroughEnd"; } | { readonly _tag: "ThroughKey"; readonly key: QueryStreamKey.Complete; } | { readonly _tag: "Unpinned"; }) => import("effect/Unify").Unify>; ) => any; }>(value: { readonly _tag: "ThroughEnd"; } | { readonly _tag: "ThroughKey"; readonly key: QueryStreamKey.Complete; } | { readonly _tag: "Unpinned"; }, cases: Cases): import("effect/Unify").Unify>; }; readonly ThroughEnd: Data.TaggedEnum.ConstructorFrom<{ readonly _tag: "ThroughEnd"; }, "_tag">; readonly ThroughKey: Data.TaggedEnum.ConstructorFrom<{ readonly _tag: "ThroughKey"; readonly key: QueryStreamKey.Complete; }, "_tag">; readonly Unpinned: Data.TaggedEnum.ConstructorFrom<{ readonly _tag: "Unpinned"; }, "_tag">; }; /** * @experimental */ export type Start = Data.TaggedEnum<{ Beginning: {}; After: { readonly key: QueryStreamKey.Complete; readonly cursor: string; }; }>; /** * @experimental */ export declare const Start: { readonly $is: (tag: Tag) => (u: unknown) => u is Extract<{ readonly _tag: "After"; readonly key: QueryStreamKey.Complete; readonly cursor: string; }, { readonly _tag: Tag; }> | Extract<{ readonly _tag: "Beginning"; }, { readonly _tag: Tag; }>; readonly $match: { ) => any; }>(cases: Cases): (value: { readonly _tag: "After"; readonly key: QueryStreamKey.Complete; readonly cursor: string; } | { readonly _tag: "Beginning"; }) => import("effect/Unify").Unify>; ) => any; }>(value: { readonly _tag: "After"; readonly key: QueryStreamKey.Complete; readonly cursor: string; } | { readonly _tag: "Beginning"; }, cases: Cases): import("effect/Unify").Unify>; }; readonly After: Data.TaggedEnum.ConstructorFrom<{ readonly _tag: "After"; readonly key: QueryStreamKey.Complete; readonly cursor: string; }, "_tag">; readonly Beginning: Data.TaggedEnum.ConstructorFrom<{ readonly _tag: "Beginning"; }, "_tag">; }; /** * @experimental */ export interface ScanRequest { readonly numItems: PageSize; readonly after: Option.Option; readonly range: Range; } /** * @experimental */ export type Request = Data.TaggedEnum<{ Unchanged: { readonly cursor: string; }; Scan: ScanRequest; }>; /** * @experimental */ export declare const parseRequest: (numItems: number, start: Start, range: Range) => Result.Result; /** * A nonempty scan, including filtered markers. */ type Progress = Chunk.NonEmptyChunk; interface Stopped { readonly page: Chunk.Chunk; readonly progress: Progress; } /** * @experimental */ export type QueryStreamPagination = Data.TaggedEnum<{ Reading: { readonly page: Chunk.Chunk; readonly progress: Option.Option; }; ItemLimit: Stopped; ReadLimit: Stopped; }>; /** * @experimental */ export declare const initial: () => QueryStreamPagination; /** * @experimental */ export declare const record: (request: ScanRequest, self: QueryStreamPagination, doc: Option.Option, key: QueryStreamKey.Complete, readLimit: boolean) => QueryStreamPagination; /** * @experimental */ export type Continuation = Data.TaggedEnum<{ End: {}; Key: { readonly key: QueryStreamKey.Complete; }; }>; interface Split { readonly page: ReadonlyArray; readonly continuation: Continuation; readonly splitKey: QueryStreamKey.Complete; } /** * @experimental */ export type Outcome = Data.TaggedEnum<{ Done: { readonly page: ReadonlyArray; }; Continue: { readonly page: ReadonlyArray; readonly key: QueryStreamKey.Complete; }; SplitRequired: Split; SplitRecommended: Split; }>; declare const UnsafePageBoundaryError_base: new = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & { readonly _tag: "UnsafePageBoundaryError"; } & Readonly; /** * @experimental */ export declare class UnsafePageBoundaryError extends UnsafePageBoundaryError_base<{ readonly reason: "NoProgress" | "NoInteriorSplit"; }> { get message(): string; } /** * Decide the page result without reading a stream or serializing a cursor. * * @experimental */ export declare const finish: (request: ScanRequest, self: QueryStreamPagination, upstreamStopped: boolean) => Result.Result, UnsafePageBoundaryError>; export {}; //# sourceMappingURL=QueryStreamPagination.d.ts.map