namespace TypistTech\Imposter;
class Config implements ConfigInterface
public function __construct(string $packageDir, array $config)
$this->packageDir = StringUtil::addTrailingSlash($packageDir);
public function getAutoloads(): array
return array_map(function (string $autoload): string {
return $this->packageDir . $autoload;
}, array_unique($this->getAutoloadPaths()));
private function getAutoloadPaths(): array
$autoloads = $this->get('autoload');
unset($autoloads['exclude-from-classmap']);
return ArrayUtil::flattenMap(function ($autoloadConfig): array {
return $this->normalizeAutoload($autoloadConfig);
protected function get(string $key): array
return $this->config[$key] ?? [];
* @param $autoloadConfigs
private function normalizeAutoload($autoloadConfigs): array
if (! is_array($autoloadConfigs)) {
return [$autoloadConfigs];
return ArrayUtil::flattenMap(function ($autoloadConfig): array {
return $this->normalizeAutoload($autoloadConfig);
public function getPackageDir(): string
return $this->packageDir;
public function getRequires(): array
return array_keys($this->get('require'));