import { status } from '@synnaxlabs/client'; import { state } from '@synnaxlabs/x'; import { default as z } from 'zod'; /** Carries `initialStatusDetails` only when the query declares a details schema. */ export type InitialStatusDetailsContainer = [StatusDetails] extends [z.ZodNever] ? {} : { initialStatusDetails: z.output; }; /** @returns the initial status details, or undefined when the query declares none. */ export declare const parseInitialStatusDetails: (container: InitialStatusDetailsContainer) => z.output; /** @returns the details a result's status carries, or undefined when it carries none. */ export declare const resultStatusDetails: (result: Result) => z.output; /** The status a {@link Result} carries, narrowed by its variant. */ export type ResultStatus = status.Status> | status.Status> | status.Status> | status.Status>; /** A query that failed. Its status holds the error and its stack. */ export interface ErrorResult { variant: "error"; status: status.Status>; data: undefined; } /** A query that returned. Its data is always present. */ export type SuccessResult = { variant: "success"; status: status.Status>; data: Data; }; /** A query still in flight. Its data holds the previous result, when there was one. */ export type LoadingResult = { variant: "loading"; status: status.Status>; data: Data | undefined; }; /** A query that never ran, because no Core is connected or no query was given. */ export type DisabledResult = { variant: "disabled"; status: status.Status>; data: Data | undefined; }; /** * The state of a Flux query. Switch on `variant` to narrow it: only a success result * guarantees its data. */ export type Result = ErrorResult | SuccessResult | LoadingResult | DisabledResult; interface LoadingResultCreator { (op: string, data?: Data | undefined): LoadingResult; (op: string, data: Data | undefined, statusDetails: z.output): LoadingResult; } interface SuccessResultCreator { (op: string, data?: Data | undefined): SuccessResult; (op: string, data: Data | undefined, statusDetails: z.output): SuccessResult; } /** Builds a {@link LoadingResult} whose message names the operation in flight. */ export declare const loadingResult: LoadingResultCreator; /** Builds a {@link SuccessResult} whose message names the operation that finished. */ export declare const successResult: SuccessResultCreator; /** Builds an {@link ErrorResult} from a thrown value, keeping its cause chain. */ export declare const errorResult: (op: string, error: unknown) => ErrorResult; interface NullClientResultCreator { (op: string): DisabledResult; (op: string, statusDetails: z.output): DisabledResult; } /** Builds a {@link DisabledResult} for a query attempted with no Core connected. */ export declare const nullClientResult: NullClientResultCreator; /** Builds a {@link DisabledResult} for a query the caller left unset. */ export declare const noQueryResult: (op: string) => DisabledResult; export {}; //# sourceMappingURL=result.d.ts.map