aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/core/async/spawn.lua
blob: e643f09826c1538bae60d9e70abf2daa8e24d100 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
local a = require "nvim-lsp-installer.core.async"
local process = require "nvim-lsp-installer.process"
local platform = require "nvim-lsp-installer.platform"

local async_spawn = a.promisify(process.spawn)

local spawn = {
    aliases = {
        npm = platform.is_win and "npm.cmd" or "npm",
    },
}

setmetatable(spawn, {
    __index = function(self, k)
        return function(args)
            local stdio = process.in_memory_sink()
            local cmd_args = {}
            for i, arg in ipairs(args) do
                cmd_args[i] = arg
            end
            ---@type JobSpawnOpts
            local spawn_args = {
                stdio_sink = stdio.sink,
                cwd = args.cwd,
                env = args.env,
                args = cmd_args,
            }
            local cmd = self.aliases[k] or k
            local _, exit_code = async_spawn(cmd, spawn_args)
            assert(exit_code == 0, ("%q exited with an error code: %d."):format(cmd, exit_code))
            return table.concat(stdio.buffers.stdout, ""), table.concat(stdio.buffers.stderr, "")
        end
    end,
})

return spawn