import { IsNullable, MakeNullable, Override as _Override } from "./utils"; /** * The results of a query can be a single item, or an array of items, * and the results can be nullable too. * * However, most chainable methods need to look at the shape * of the inner "ResultItem", ignoring the nullable and Array wrappers. * You can do this with `ResultItem.Infer`. * * Additionally, these methods might need to rewrap a new type, * while preserving the nullable/Array wrappers. * You can do this with `ResultItem.Override` */ export declare namespace ResultItem { /** * Retrieves just the shape of the TResult, unwrapping nulls and arrays. * * @example * Infer<"FOO"> // Result: "FOO" * Infer> // Result: "FOO" * Infer // Result: "FOO" * Infer> // Result: "FOO" * Infer> // Result: "FOO" */ type Infer = ResultUtils.Unwrap["TResultItem"]; /** * Retrieves just the shape of the TResult, unwrapping arrays. * * Preserves nulls. * * @example * Infer<"FOO"> // Result: "FOO" * Infer> // Result: "FOO" * Infer // Result: null | "FOO" * Infer> // Result: null | "FOO" */ type InferMaybe = ResultUtils.Wrap<_Override, { IsArray: false; }>>; /** * Overrides the shape of the result, while preserving IsArray and IsNullable * * @example * OverrideResultItem, "BAR">; // Result: null | Array<"BAR"> * OverrideResultItem, "BAR">; // Result: Array<"BAR"> * OverrideResultItem; // Result: null | "BAR" * OverrideResultItem<"FOO", "BAR">; // Result: "BAR" */ type Override = ResultUtils.Wrap<_Override, { TResultItem: TResultItemNew; }>>; } /** * This namespace provides utilities for unwrapping * and re-wrapping the null/Array types. * * @internal Only exported for tests */ export declare namespace ResultUtils { export type Unwrapped = { TResultItem: unknown; IsArray: boolean; IsNullable: boolean; }; export type Unwrap = { TResultItem: NonNullable extends Array ? NonNullable : NonNullable; IsArray: IsArray>; IsNullable: IsNullable; }; export type Wrap = MakeNullable>; type MakeArray = IsArray extends true ? Array : T; type IsArray = T extends Array ? true : false; export {}; }