diff options
Diffstat (limited to 'lua/nvim-lsp-installer/core/fetch.lua')
| -rw-r--r-- | lua/nvim-lsp-installer/core/fetch.lua | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/lua/nvim-lsp-installer/core/fetch.lua b/lua/nvim-lsp-installer/core/fetch.lua index d97da59b..4c0d1f25 100644 --- a/lua/nvim-lsp-installer/core/fetch.lua +++ b/lua/nvim-lsp-installer/core/fetch.lua @@ -12,28 +12,42 @@ local HEADERS = { iwr = ("-Headers @{'User-Agent' = '%s'}"):format(USER_AGENT), } +---@alias FetchOpts {out_file:string} + ---@async ---@param url string @The url to fetch. -local function fetch(url) +---@param opts FetchOpts +local function fetch(url, opts) + opts = opts or {} log.fmt_debug("Fetching URL %s", url) local platform_specific = Result.failure() if platform.is_win then - platform_specific = powershell.command( - ([[Write-Output (iwr %s -UseBasicParsing -Uri %q).Content;]]):format(HEADERS.iwr, url) - ) + if opts.out_file then + platform_specific = powershell.command( + ([[iwr %s -UseBasicParsing -Uri %q; -OutFile %q]]):format(HEADERS.iwr, url, opts.out_file) + ) + else + platform_specific = powershell.command( + ([[Write-Output (iwr %s -UseBasicParsing -Uri %q).Content;]]):format(HEADERS.iwr, url) + ) + end end return platform_specific :recover_catching(function() - return spawn.wget({ HEADERS.wget, "-nv", "-O", "-", url }):get_or_throw() + return spawn.wget({ HEADERS.wget, "-nv", "-O", opts.out_file or "-", url }):get_or_throw() end) :recover_catching(function() - return spawn.curl({ HEADERS.curl, "-fsSL", url }):get_or_throw() + return spawn.curl({ HEADERS.curl, "-fsSL", opts.out_file and { "-o", opts.out_file } or vim.NIL, url }):get_or_throw() end) :map(function(result) - return result.stdout + if opts.out_file then + return result + else + return result.stdout + end end) end |
