| |
| |
| |
| |
| |
| |
| |
| import { useQuery } from "@tanstack/react-query"; |
| import type { |
| QueryFunction, |
| QueryKey, |
| UseQueryOptions, |
| UseQueryResult, |
| } from "@tanstack/react-query"; |
|
|
| import type { HealthStatus } from "./api.schemas"; |
|
|
| import { customFetch } from "../custom-fetch"; |
| import type { ErrorType } from "../custom-fetch"; |
|
|
| type AwaitedInput<T> = PromiseLike<T> | T; |
|
|
| type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; |
|
|
| type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1]; |
|
|
| |
| |
| |
| |
| export const getHealthCheckUrl = () => { |
| return `/api/healthz`; |
| }; |
|
|
| export const healthCheck = async ( |
| options?: RequestInit, |
| ): Promise<HealthStatus> => { |
| return customFetch<HealthStatus>(getHealthCheckUrl(), { |
| ...options, |
| method: "GET", |
| }); |
| }; |
|
|
| export const getHealthCheckQueryKey = () => { |
| return [`/api/healthz`] as const; |
| }; |
|
|
| export const getHealthCheckQueryOptions = < |
| TData = Awaited<ReturnType<typeof healthCheck>>, |
| TError = ErrorType<unknown>, |
| >(options?: { |
| query?: UseQueryOptions< |
| Awaited<ReturnType<typeof healthCheck>>, |
| TError, |
| TData |
| >; |
| request?: SecondParameter<typeof customFetch>; |
| }) => { |
| const { query: queryOptions, request: requestOptions } = options ?? {}; |
|
|
| const queryKey = queryOptions?.queryKey ?? getHealthCheckQueryKey(); |
|
|
| const queryFn: QueryFunction<Awaited<ReturnType<typeof healthCheck>>> = ({ |
| signal, |
| }) => healthCheck({ signal, ...requestOptions }); |
|
|
| return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< |
| Awaited<ReturnType<typeof healthCheck>>, |
| TError, |
| TData |
| > & { queryKey: QueryKey }; |
| }; |
|
|
| export type HealthCheckQueryResult = NonNullable< |
| Awaited<ReturnType<typeof healthCheck>> |
| >; |
| export type HealthCheckQueryError = ErrorType<unknown>; |
|
|
| |
| |
| |
|
|
| export function useHealthCheck< |
| TData = Awaited<ReturnType<typeof healthCheck>>, |
| TError = ErrorType<unknown>, |
| >(options?: { |
| query?: UseQueryOptions< |
| Awaited<ReturnType<typeof healthCheck>>, |
| TError, |
| TData |
| >; |
| request?: SecondParameter<typeof customFetch>; |
| }): UseQueryResult<TData, TError> & { queryKey: QueryKey } { |
| const queryOptions = getHealthCheckQueryOptions(options); |
|
|
| const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & { |
| queryKey: QueryKey; |
| }; |
|
|
| return { ...query, queryKey: queryOptions.queryKey }; |
| } |
|
|