import type { TypeOrPromisedType } from '../../../resolveable/types'; import type { InferOptionalWaitableAndBindingValueTypes, InferRequiredWaitableAndBindingValueTypes } from '../../../waitable/types/infer-waitable-and-binding-value-types'; import type { WaitableDependencies } from '../../../waitable/types/waitable-dependencies'; /** A transformer that requires all waitable values to be loaded. */ export type UseDerivedWaitableRequiredValuesTransformer = ( dependencyValues: InferRequiredWaitableAndBindingValueTypes, dependencies: DependenciesT, setFailure: (failure: FailureT) => void, wasReset: () => boolean ) => TypeOrPromisedType; /** A transformer that doesn't require all waitable values to be loaded. */ export type UseDerivedWaitableOptionalValuesTransformer = ( dependencyValues: InferOptionalWaitableAndBindingValueTypes, dependencies: DependenciesT, setFailure: (failure: FailureT) => void, wasReset: () => boolean ) => TypeOrPromisedType; /** * Transformers that are used depending on the state of the waitables. * * The first applicable transformer is used, evaluated in the following order: `ifLoaded`, `ifError`, `ifLoading`, `ifErrorOrLoading`, * `always` */ export interface UseDerivedWaitableNamedTransformers { ifLoaded?: UseDerivedWaitableRequiredValuesTransformer; ifError?: UseDerivedWaitableOptionalValuesTransformer; ifLoading?: UseDerivedWaitableOptionalValuesTransformer; ifErrorOrLoading?: UseDerivedWaitableOptionalValuesTransformer; always?: UseDerivedWaitableOptionalValuesTransformer; }