import type { RouterContext, Route } from '../../index'; export type RouteResource = { type: ResourceType; getKey: (routerContext: RouterContext, customContext: ResourceStoreContext) => ResourceKey; maxAge: number; getData: (routerContext: RouterDataContext, customContext: ResourceStoreContext) => T | Promise; maxCache: number; isBrowserOnly: boolean; depends: ResourceType[] | null; }; export type RouteResources = RouteResource[]; export interface ResourceStoreContext { } export type ResourceType = string; export type ResourceKey = string; export type RouteResourceLoading = boolean; export type RouteResourceTimestamp = number | null; export type RouteResourceError = Record | Error; export type RouteResourceDataPayload = Record; export type RouteResourceUpdater = (data: RouteResourceData) => RouteResourceData; export type EmptyObject = { [K in any]: never; }; export type RouteResourceSyncResult = { data: RouteResourceData; error: null; loading: true; } | { data: RouteResourceData; error: null; loading: false; promise: Promise; }; export type RouteResourceAsyncResult = { data: RouteResourceData; error: null; loading: false; promise: Promise; } | { error: RouteResourceError; loading: false; promise: Promise; } | { error: RouteResourceError; loading: true; promise: null; }; type RouteResourceResponseBase = { key?: string; loading: RouteResourceLoading; error: RouteResourceError | null; data: RouteResourceData | null; promise: Promise | null; expiresAt: RouteResourceTimestamp; accessedAt: RouteResourceTimestamp; }; export type RouteResourceResponseInitial = { loading: false; error: null; data: null; promise: null; }; export type RouteResourceResponseLoading = { loading: true; }; export type RouteResourceResponseError = { loading: false; error: RouteResourceError; }; export type RouteResourceResponseLoaded = { loading: false; error: null; data: RouteResourceData; }; export type RouteResourceResponse = RouteResourceResponseBase & (RouteResourceResponseInitial | RouteResourceResponseLoading | RouteResourceResponseError | RouteResourceResponseLoaded); export type ResourceDependencies = { [type: string]: RouteResourceResponse | undefined; }; export type RouterDataContext = RouterContext & { isPrefetch: boolean; dependencies: ResourceDependencies; }; export type UseResourceHookResponse = RouteResourceResponse & { update: (getNewData: RouteResourceUpdater) => void; refresh: () => void; clear: () => void; clearAll: () => void; }; export type RouteResourceDataForType = Record>; export type ResourceStoreData = Record; export type RouteWithResources = Route & { resources?: RouteResources; }; export {};