import * as queries from './queries' export type BoundFunction = T extends ( container: HTMLElement, ...args: infer P ) => infer R ? (...args: P) => R : never export type BoundFunctions = Q extends typeof queries ? { getByLabelText( ...args: Parameters>> ): ReturnType> getAllByLabelText( ...args: Parameters>> ): ReturnType> queryByLabelText( ...args: Parameters>> ): ReturnType> queryAllByLabelText( ...args: Parameters>> ): ReturnType> findByLabelText( ...args: Parameters>> ): ReturnType> findAllByLabelText( ...args: Parameters>> ): ReturnType> getByPlaceholderText( ...args: Parameters>> ): ReturnType> getAllByPlaceholderText( ...args: Parameters>> ): ReturnType> queryByPlaceholderText( ...args: Parameters>> ): ReturnType> queryAllByPlaceholderText( ...args: Parameters>> ): ReturnType> findByPlaceholderText( ...args: Parameters>> ): ReturnType> findAllByPlaceholderText( ...args: Parameters>> ): ReturnType> getByText( ...args: Parameters>> ): ReturnType> getAllByText( ...args: Parameters>> ): ReturnType> queryByText( ...args: Parameters>> ): ReturnType> queryAllByText( ...args: Parameters>> ): ReturnType> findByText( ...args: Parameters>> ): ReturnType> findAllByText( ...args: Parameters>> ): ReturnType> getByAltText( ...args: Parameters>> ): ReturnType> getAllByAltText( ...args: Parameters>> ): ReturnType> queryByAltText( ...args: Parameters>> ): ReturnType> queryAllByAltText( ...args: Parameters>> ): ReturnType> findByAltText( ...args: Parameters>> ): ReturnType> findAllByAltText( ...args: Parameters>> ): ReturnType> getByTitle( ...args: Parameters>> ): ReturnType> getAllByTitle( ...args: Parameters>> ): ReturnType> queryByTitle( ...args: Parameters>> ): ReturnType> queryAllByTitle( ...args: Parameters>> ): ReturnType> findByTitle( ...args: Parameters>> ): ReturnType> findAllByTitle( ...args: Parameters>> ): ReturnType> getByDisplayValue( ...args: Parameters>> ): ReturnType> getAllByDisplayValue( ...args: Parameters>> ): ReturnType> queryByDisplayValue( ...args: Parameters>> ): ReturnType> queryAllByDisplayValue( ...args: Parameters>> ): ReturnType> findByDisplayValue( ...args: Parameters>> ): ReturnType> findAllByDisplayValue( ...args: Parameters>> ): ReturnType> getByRole( ...args: Parameters>> ): ReturnType> getAllByRole( ...args: Parameters>> ): ReturnType> queryByRole( ...args: Parameters>> ): ReturnType> queryAllByRole( ...args: Parameters>> ): ReturnType> findByRole( ...args: Parameters>> ): ReturnType> findAllByRole( ...args: Parameters>> ): ReturnType> getByTestId( ...args: Parameters>> ): ReturnType> getAllByTestId( ...args: Parameters>> ): ReturnType> queryByTestId( ...args: Parameters>> ): ReturnType> queryAllByTestId( ...args: Parameters>> ): ReturnType> findByTestId( ...args: Parameters>> ): ReturnType> findAllByTestId( ...args: Parameters>> ): ReturnType> } & { [P in keyof Q]: BoundFunction } : { [P in keyof Q]: BoundFunction } export type Query = ( container: HTMLElement, ...args: any[] ) => | Error | HTMLElement | HTMLElement[] | Promise | Promise | null export interface Queries { [T: string]: Query } export function getQueriesForElement< QueriesToBind extends Queries = typeof queries, // Extra type parameter required for reassignment. T extends QueriesToBind = QueriesToBind, >(element: HTMLElement, queriesToBind?: T): BoundFunctions