import {type SanityProjectionResult} from 'groq' import {filter, firstValueFrom} from 'rxjs' import {bindActionBySourceAndPerspective} from '../store/createActionBinder' import {type SanityInstance} from '../store/createSanityInstance' import {getProjectionState, type ProjectionOptions} from './getProjectionState' import {projectionStore} from './projectionStore' import {type ProjectionValuePending} from './types' /** @beta */ export function resolveProjection< TProjection extends string = string, TDocumentType extends string = string, TDataset extends string = string, TProjectId extends string = string, >( instance: SanityInstance, options: ProjectionOptions, ): Promise< ProjectionValuePending< SanityProjectionResult > > /** @beta */ export function resolveProjection( instance: SanityInstance, options: ProjectionOptions, ): Promise> /** @beta */ export function resolveProjection( ...args: Parameters ): ReturnType { return _resolveProjection(...args) } /** * @beta */ const _resolveProjection = bindActionBySourceAndPerspective( projectionStore, ( {instance}: {instance: SanityInstance}, options: ProjectionOptions, ): Promise>> => firstValueFrom( getProjectionState>(instance, options).observable.pipe( filter((state): state is ProjectionValuePending> => !!state?.data), ), ), )