import { TInitStore } from "./types.js"; interface IPromise extends Promise { status?: 'fulfilled' | 'pending' | 'rejected'; value?: TReturn; reason?: any; } interface ISuspenseQueryParams { fieldName?: string; errorFields?: string[]; } interface ISuspenseQueryOptions { hash?: unknown; } interface ISuspenseSubqueryOptions { id: string; hash: unknown; } /** * Run request and cache promise * Sync suspense status between server and client */ declare class SuspenseQuery { /** * @protected */ protected promise: Promise | undefined; /** * Subqueries info */ protected subqueries: Map; }>; /** * Target store */ protected readonly store: TInitStore; /** * @protected */ protected readonly params: Required; /** * @constructor */ /** * @constructor */ constructor(store: TInitStore, { fieldName, errorFields }?: ISuspenseQueryParams); /** * Error to json */ /** * Error to json */ protected errorJson(e: any): void; /** * Assign custom error fields to error */ /** * Assign custom error fields to error */ protected jsonToError(e: Error, values: Record): Error; /** * Throw suspense error */ /** * Throw suspense error */ protected throwError(): void; /** * Detect if suspense is restored from server side: * - throw error if exist * - skip run suspense if already completed */ /** * Detect if suspense is restored from server side: * - throw error if exist * - skip run suspense if already completed */ protected isComplete(hash: unknown): boolean; /** * Run request * Save request resolve status */ query: (promise: () => Promise, options?: ISuspenseQueryOptions) => TReturn | undefined; /** * Run subquery * Re-fetch data from query by hash changes in children components * NOTE: only client side */ subquery: (promise: () => Promise, options: ISuspenseSubqueryOptions) => TReturn | undefined; /** * Change status of promise. * Throw promise to react suspense */ static run: (promise: IPromise | undefined) => TReturn | undefined; } export { SuspenseQuery as default, IPromise };