public function getUriMap()

in src/UriMapBuilder.hack [21:51]


  public function getUriMap(
  ): ImmMap<HttpMethod, ImmMap<string, classname<TBase>>> {
    $map = Map { };
    foreach (HttpMethod::getValues() as $method) {
      $map[$method] = Map { };
    }

    $controllers = $this->controllerFacts->getControllers();
    foreach ($controllers as $controller => $methods) {
      $path = $controller::getUriPattern()->getFastRouteFragment();
      foreach ($methods as $method) {
        invariant(
          !$map[$method]->containsKey($path),
          "Duplicate entry for path '%s': '%s' and '%s'",
          $path,
          $map[$method]->at($path),
          $controller,
        );
        $map[$method][$path] = $controller;
      }
    }

    foreach ($map as $submap) {
      \natsort(inout $submap);
    }

    return $map
      ->filter($submap ==> !$submap->isEmpty())
      ->map($submap ==> $submap->immutable())
      ->immutable();
  }