aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/managers/powershell/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/mason-core/managers/powershell/init.lua')
-rw-r--r--lua/mason-core/managers/powershell/init.lua46
1 files changed, 46 insertions, 0 deletions
diff --git a/lua/mason-core/managers/powershell/init.lua b/lua/mason-core/managers/powershell/init.lua
new file mode 100644
index 00000000..209e0fe1
--- /dev/null
+++ b/lua/mason-core/managers/powershell/init.lua
@@ -0,0 +1,46 @@
+local spawn = require "mason-core.spawn"
+local process = require "mason-core.process"
+
+local M = {}
+
+local PWSHOPT = {
+ progress_preference = [[ $ProgressPreference = 'SilentlyContinue'; ]], -- https://stackoverflow.com/a/63301751
+ security_protocol = [[ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; ]],
+}
+
+---@param script string
+---@param opts JobSpawnOpts | nil
+---@param custom_spawn JobSpawn | nil
+function M.script(script, opts, custom_spawn)
+ opts = opts or {}
+ ---@type JobSpawn
+ local spawner = custom_spawn or spawn
+ return spawner.powershell(vim.tbl_extend("keep", {
+ "-NoProfile",
+ on_spawn = function(_, stdio)
+ local stdin = stdio[1]
+ stdin:write(PWSHOPT.progress_preference)
+ stdin:write(PWSHOPT.security_protocol)
+ stdin:write(script)
+ stdin:close()
+ end,
+ env_raw = process.graft_env(opts.env or {}, { "PSMODULEPATH" }),
+ }, opts))
+end
+
+---@param command string
+---@param opts JobSpawnOpts | nil
+---@param custom_spawn JobSpawn | nil
+function M.command(command, opts, custom_spawn)
+ opts = opts or {}
+ ---@type JobSpawn
+ local spawner = custom_spawn or spawn
+ return spawner.powershell(vim.tbl_extend("keep", {
+ "-NoProfile",
+ "-Command",
+ PWSHOPT.progress_preference .. PWSHOPT.security_protocol .. command,
+ env_raw = process.graft_env(opts.env or {}, { "PSMODULEPATH" }),
+ }, opts))
+end
+
+return M