public static function replaceTokens($data, $tokens)
    {
        if (is_string($data)) {
            return preg_replace_callback('/%(\w+)%/', function ($matches) use ($tokens) {
                $token = strtoupper($matches[1]);
                if (isset($tokens[$token])) {
                    return $tokens[$token];
                }

                return getenv($token) ?: $matches[0];
            }, $data);
        }

        if (is_array($data)) {
            array_walk($data, function (&$value) use ($tokens) {
                $value = static::replaceTokens($value, $tokens);
            });
        }

        return $data;
    }