import type { AnyRouter, Constrain, OptionalStructuralSharing, ValidateJSON, } from '@tanstack/router-core' export type DefaultStructuralSharingEnabled = boolean extends TRouter['options']['defaultStructuralSharing'] ? // for now, default to false. // TODO in V2: default to true false : NonNullable export interface RequiredStructuralSharing { readonly structuralSharing: Constrain } export type StructuralSharingOption< TRouter extends AnyRouter, TSelected, TStructuralSharing, > = unknown extends TSelected ? OptionalStructuralSharing : unknown extends TRouter['routeTree'] ? OptionalStructuralSharing : TSelected extends ValidateJSON ? OptionalStructuralSharing : DefaultStructuralSharingEnabled extends true ? RequiredStructuralSharing : OptionalStructuralSharing export type StructuralSharingEnabled< TRouter extends AnyRouter, TStructuralSharing, > = boolean extends TStructuralSharing ? DefaultStructuralSharingEnabled : TStructuralSharing export type ValidateSelected< TRouter extends AnyRouter, TSelected, TStructuralSharing, > = StructuralSharingEnabled extends true ? ValidateJSON : TSelected