public static function simplifyPath(string $path): array
    {
        $parts = explode('/', str_replace('//', '/./', $path));
        $count = count($parts);
        for ($i = 0; $i < $count; $i = $i + 1) {
            // is .. and previous is not ..
            if ($i > 0 && '..' === $parts[$i] && '..' !== $parts[$i - 1]) {
                unset($parts[$i - 1]);
                unset($parts[$i]);
                return static::simplifyPath(implode('/', $parts));
            }
            // is inner '.'
            if ('.' == $parts[$i]) {
                unset($parts[$i]);
                return static::simplifyPath(implode('/', $parts));
            }
        }
        return array_values($parts);
    }