code: public function createRepository($type, $config, $name = null)
      {
          if (!isset($this->repositoryClasses[$type])) {
              throw new \InvalidArgumentException('Repository type is not registered: '.$type);
          }
  
          if (isset($config['packagist']) && false === $config['packagist']) {
              $this->io->writeError('<warning>Repository "'.$name.'" ('.json_encode($config).') has a packagist key which should be in its own repository definition</warning>');
          }
  
          $class = $this->repositoryClasses[$type];
  
          $reflMethod = new \ReflectionMethod($class, '__construct');
          $params = $reflMethod->getParameters();
          if (isset($params[4]) && $params[4]->getClass() && $params[4]->getClass()->getName() === 'Composer\Util\RemoteFilesystem') {
              return new $class($config, $this->io, $this->config, $this->eventDispatcher, $this->rfs);
          }
  
          return new $class($config, $this->io, $this->config, $this->eventDispatcher);
      }
docs: Returns a new repository for a specific installation type.
  
  @param  string                    $type   repository type
  @param  array                     $config repository configuration
  @param  string                    $name   repository name
  @throws \InvalidArgumentException if repository for provided type is not registered
  @return RepositoryInterface