med-notes/.pnpm-store/v10/files/4f/10d9ee751aa473502497580037c8dec63cec192930bfcc8b080deced2b53be170041231bcd48599591146054e4d7344e433446598a6901e935d0ea2cd1ad6b
2025-05-09 05:30:08 +02:00

48 lines
1.5 KiB
Plaintext

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