import * as Data from "effect/Data"; import * as Equivalence_ from "effect/Equivalence"; import * as Result from "effect/Result"; import type * as Types from "effect/Types"; import * as QueryStreamKeyLabels from "./QueryStreamKeyLabels"; /** * One runtime position of a stream key. Explicit IDs and their aliases are * visible; implicit ID tiebreakers have no label. Empty keys have no * positions. * * @experimental */ export type Position = Data.TaggedEnum<{ Visible: { readonly label: string; }; ImplicitId: {}; }>; declare const TypeId = "@confect/server/QueryStreamKeyLayout"; /** * Describes the positions in a stream's keys: their sequence, their labels, and * where implicit document-ID tiebreakers occur. Every element has its own key * values; the stream has one shared layout. * * For example, labels `["text", "_creationTime"]` describe the labeled * positions in a key such as `["apple", 1, "n1"]`. Its layout also records the * final implicit ID position. Joined layouts retain each component's ID, so * their labels alone do not describe every key position. * * Layouts are compatible when they have the same total width, labels in the * same positions, and implicit-ID positions. Direction is separate. Layouts * contain no key values, value-type schemas, table identity, or equality-pinned * values. Labels start as index field paths but may be renamed. An explicit ID, * such as in `by_id`, has a label. * * Reuse a stream's `keyLayout` with `empty` or `flatMap`'s `innerKeyLayout`. * Creating a stream to obtain its layout does not read documents. The * `KeyLabels` parameter tracks only labels; implicit-ID positions are checked * at runtime. Normally this type is inferred from the source stream. * * @experimental */ export interface QueryStreamKeyLayout { readonly [TypeId]: { readonly _Labels: Types.Covariant; readonly positions: ReadonlyArray; }; } /** * The runtime positions, including implicit ID tiebreakers. * * @experimental */ export declare const positions: (self: QueryStreamKeyLayout) => ReadonlyArray; /** * The source field paths remaining after an equality prefix. * * @experimental */ export type RemainingFieldPaths, Count extends number> = Count extends unknown ? DropPrefix : never; type DropPrefix, Count extends number, Prefix extends ReadonlyArray = []> = number extends Count ? ReadonlyArray : Prefix["length"] extends Count ? Types.Mutable : FieldPaths extends readonly [ string, ...infer TailFieldPaths extends ReadonlyArray ] ? DropPrefix : FieldPaths extends readonly [] ? [] : ReadonlyArray; declare const InvalidEqualityPrefixError_base: new = {}>(args: Types.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & { readonly _tag: "InvalidEqualityPrefixError"; } & Readonly; /** * The equality prefix cannot select a whole number of source field paths. * * @experimental */ export declare class InvalidEqualityPrefixError extends InvalidEqualityPrefixError_base<{ readonly fieldPaths: ReadonlyArray; readonly eqCount: number; }> { get message(): string; } declare const InvalidLabelPrefixError_base: new = {}>(args: Types.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & { readonly _tag: "InvalidLabelPrefixError"; } & Readonly; /** * The requested labels do not form a prefix of the layout's visible labels. * * @experimental */ export declare class InvalidLabelPrefixError extends InvalidLabelPrefixError_base<{ readonly keyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels; readonly prefixKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels; }> { get message(): string; } declare const LabelCountMismatchError_base: new = {}>(args: Types.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & { readonly _tag: "LabelCountMismatchError"; } & Readonly; /** * The replacement labels cannot fill exactly the layout's visible positions. * * @experimental */ export declare class LabelCountMismatchError extends LabelCountMismatchError_base<{ readonly keyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels; readonly replacementKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels; }> { get message(): string; } /** * Construct a scan layout from the original index field paths, before equality * pinning. Only an ID absent from the end of that original key is implicit. * Pinning every field of `by_id` produces a zero-width layout; pinning every * visible field of another index leaves its implicit ID. Invalid equality * prefix lengths return `InvalidEqualityPrefixError`. * * @experimental */ export declare function fromIndex>(fieldPaths: FieldPaths): Result.Result>, InvalidEqualityPrefixError>; /** * @experimental */ export declare function fromIndex, const Count extends number>(fieldPaths: FieldPaths, eqCount: Count): Result.Result>>, InvalidEqualityPrefixError>; /** * Concatenate layouts without losing component tiebreakers. * * @experimental */ export declare const concat: (self: QueryStreamKeyLayout, that: QueryStreamKeyLayout) => QueryStreamKeyLayout>; /** * Format visible labels and implicit IDs for diagnostics. * * @experimental */ export declare const format: (self: QueryStreamKeyLayout) => string; /** * The labels available to `distinct` and `renameKey`. * * @experimental */ export declare function visibleLabels(self: QueryStreamKeyLayout): KeyLabels; /** * Number of positions in an element's runtime key. * * @experimental */ export declare const runtimeWidth: (self: QueryStreamKeyLayout) => number; /** * @experimental */ export declare const Equivalence: Equivalence_.Equivalence; declare const KeyLayoutMismatchError_base: new = {}>(args: Types.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & { readonly _tag: "KeyLayoutMismatchError"; } & Readonly; /** * @experimental */ export declare class KeyLayoutMismatchError extends KeyLayoutMismatchError_base<{ readonly expectedKeyLayout: QueryStreamKeyLayout; readonly actualKeyLayout: QueryStreamKeyLayout; }> { get message(): string; } /** * @experimental */ export declare const validateEquivalence: (expectedKeyLayout: QueryStreamKeyLayout, actualKeyLayout: QueryStreamKeyLayout) => Result.Result; /** * Parse a visible label prefix and resolve its runtime width. Implicit IDs * before the last selected label are included; implicit IDs after it are not. * * @experimental */ export declare const resolvePrefix: (self: QueryStreamKeyLayout, prefixKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels) => Result.Result; /** * Relabel visible positions, preserving every implicit ID. * * @experimental */ export declare const rename: (self: QueryStreamKeyLayout, replacementKeyLabels: ReplacementKeyLabels) => Result.Result, LabelCountMismatchError>; export {}; //# sourceMappingURL=QueryStreamKeyLayout.d.ts.map