/*
a
  b
  c/:cid
    d/:did
    e?f
    g/:gid?h
*/

type RootOfGenRouterType = GenRouterTypes['a']['$types']

interface GenRouterTypes {
  a: {
    $types: {
      name: 'a',
      params: any,
      queries: any,
      next: GenRouterTypes['a']['b']['$type'] | GenRouterTypes['a']['c']['$type']
    }
    b: {
      $type: {
        name: 'b',
        params: any,
        queries: any,
        next: any
      }
    }
    c: {
      $type: {
        name: 'c',
        params: {
          cid: string
        },
        next: GenRouterTypes['a']['c']['d']['$type'] | GenRouterTypes['a']['c']['d']['$type'] | GenRouterTypes['a']['c']['g']['$type']
      }
      d: {
        $type: {
          name: 'd',
          params: {
            cid: string,
            did: string
          }
        }
      },
      e: {
        $type: {
          name: 'e',
          params: any,
          queries: {
            f: string
          }
        }
      },
      g: {
        $type: {
          name: 'g',
          params: {
            cid: string,
            gid: string,
          },
          queries: {
            h: string
          },
          next: any
        }
      }
    }
  }
}