$dir = __DIR__ . '/cache/' . $package . '@' . $version;
        if (!is_dir($dir)) {
            mkdir($dir, 0777, true);
        }
        return $dir;
    }
    public static function pkg($packageStr)
    {
        preg_match('/(?P<ref>(?P<name>(?P<vendor>[A-Za-z]+)\\/(?P<package>[A-Za-z]+))@(?P<version>[0-9.]+))/', $packageStr, $match);
        return array_intersect_key($match, array_flip(['name', 'vendor', 'package', 'version', 'ref']));
    }
    public static function ns($fqcn)
    {
        return substr($fqcn, 0, strrpos($fqcn, '\\'));
    }
    public static function cls($fqcn)
    {
        return substr($fqcn, strrpos($fqcn, '\\') + 1);
    }
}
$dependencies = new Dependencies();
// Init:
$project = json_decode(file_get_contents(__DIR__ . '/../dependencies.json'), true);
$dependencies->parseTree($project['require']);
// Pass 1:
$dependencies->createVersionedClasses();
// Pass 2:
$dependencies->updateDependencyReferences();
// Autoload
$dependencies->aliasRootPackages();
spl_autoload_register([$dependencies, 'autoload']);