import { GunSoul, IGunChain, IGunInstanceRoot } from '.';

export type GunSoul2TNode<T> = T extends GunSoul<infer TNode, infer _Soul>
  ? TNode
  : never;

export type GunSoul2Soul<T> = T extends GunSoul<infer _TNode, infer Soul>
  ? Soul
  : never;

export type IGunChain2TNode<T> = T extends IGunChain<
  infer TNode,
  infer _TChainParent,
  infer _TNodeRoot,
  infer _TKey
>
  ? TNode
  : never;

export type IGunInstanceRoot2TGunInstance<T> = T extends IGunInstanceRoot<
  infer _TNode,
  infer TGunInstance
>
  ? TGunInstance
  : never;