public function assetPath($source, array $options = [])
    {
        $source = (string) $source;
        if (! $source) {
            return ""; // Short circuit
        }

        if (preg_match(static::URI_REGEXP, $source)) {
            return $source;// Short circuit
        }

        $assetPrefix = array_get($options, 'prefix', $this->assetsPrefix);
        if (is_callable($assetPrefix) && is_object($assetPrefix)) {
            $assetPrefix = $assetPrefix();
        }

        $assetHost = array_get($options, 'host');
        if (is_callable($assetHost) && is_object($assetHost)) {
            $assetHost = $assetHost();
        }

        $assetPort = $this->assetPort;
        if (is_callable($assetPort) && is_object($assetPort)) {
            $assetPort = $assetPort();
        }

        $protocol = Request::secure() ? "https://" : "http://";
        if (App::environment() !== (getenv('ASSETS_ENV') ?: 'production')) {
            $assetHost = $assetHost ?: $protocol.$this->getHostname().":".$assetPort;
            $assetLocation = $assetHost.$assetPrefix;
        } else {
            $assetLocation = $assetHost.$assetPrefix;
            $manifest = static::manifest();
        }
        // TODO: Sanitize/purify $source var
        $sourceName = $source;
        if (isset($manifest) && $manifest->getAssets()) {
            $sourceName = array_get($manifest->getAssets(), $sourceName, $sourceName);
        }

        $assetPath = "$assetLocation/$sourceName";
        if (File::exists(public_path().$assetPath) || preg_match(static::URI_REGEXP, $assetPath)) {
            return $assetPath;
        } else {
            // TODO: The root path of the Laravel application is hardcoded here, it might be a problem
            return '/'.preg_replace('/^\//', '', $source);
        }
    }