aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/managers
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-10-30 17:43:46 +0100
committerGitHub <noreply@github.com>2022-10-30 17:43:46 +0100
commit37c745fa73b983c86904132efb30ef2a4a76df5e (patch)
treec55fe52b7c5c20ed4fdbb3ee073519fd0ccbe6b2 /lua/mason-core/managers
parentchore: update generated code (#608) (diff)
downloadmason-37c745fa73b983c86904132efb30ef2a4a76df5e.tar
mason-37c745fa73b983c86904132efb30ef2a4a76df5e.tar.gz
mason-37c745fa73b983c86904132efb30ef2a4a76df5e.tar.bz2
mason-37c745fa73b983c86904132efb30ef2a4a76df5e.tar.lz
mason-37c745fa73b983c86904132efb30ef2a4a76df5e.tar.xz
mason-37c745fa73b983c86904132efb30ef2a4a76df5e.tar.zst
mason-37c745fa73b983c86904132efb30ef2a4a76df5e.zip
feat: add provider interface (#601)
Diffstat (limited to 'lua/mason-core/managers')
-rw-r--r--lua/mason-core/managers/github/client.lua13
-rw-r--r--lua/mason-core/managers/npm/init.lua4
-rw-r--r--lua/mason-core/managers/pip3/init.lua48
3 files changed, 25 insertions, 40 deletions
diff --git a/lua/mason-core/managers/github/client.lua b/lua/mason-core/managers/github/client.lua
index 3ef307c1..699e3fa4 100644
--- a/lua/mason-core/managers/github/client.lua
+++ b/lua/mason-core/managers/github/client.lua
@@ -2,13 +2,10 @@ local _ = require "mason-core.functional"
local log = require "mason-core.log"
local fetch = require "mason-core.fetch"
local spawn = require "mason-core.spawn"
-local api = require "mason-registry.api"
+local providers = require "mason-core.providers"
local M = {}
----@alias GitHubReleaseAsset {url: string, id: integer, name: string, browser_download_url: string, created_at: string, updated_at: string, size: integer, download_count: integer}
----@alias GitHubRelease {tag_name: string, prerelease: boolean, draft: boolean, assets:GitHubReleaseAsset[]}
----@alias GitHubTag {name: string}
---@alias GitHubCommit {sha: string}
local stringify_params = _.compose(_.join "&", _.map(_.join "="), _.sort_by(_.head), _.to_pairs)
@@ -66,11 +63,7 @@ end
---@return Result # Result<GitHubRelease>
function M.fetch_latest_release(repo, opts)
opts = opts or { include_prerelease = false }
- return api.repo.releases.latest({ repo = repo }, {
- params = {
- include_prerelease = opts.include_prerelease and "true" or "false",
- },
- })
+ return providers.github.get_latest_release(repo, { include_prerelease = opts.include_prerelease })
end
---@async
@@ -87,7 +80,7 @@ end
---@param repo string The GitHub repo ("username/repo").
---@return Result # Result<string> The latest tag name.
function M.fetch_latest_tag(repo)
- return api.repo.tags.latest({ repo = repo }):map(_.prop "tag")
+ return providers.github.get_latest_tag(repo):map(_.prop "tag")
end
---@async
diff --git a/lua/mason-core/managers/npm/init.lua b/lua/mason-core/managers/npm/init.lua
index 61ee4042..96571420 100644
--- a/lua/mason-core/managers/npm/init.lua
+++ b/lua/mason-core/managers/npm/init.lua
@@ -4,7 +4,7 @@ local Result = require "mason-core.result"
local path = require "mason-core.path"
local _ = require "mason-core.functional"
local platform = require "mason-core.platform"
-local api = require "mason-registry.api"
+local providers = require "mason-core.providers"
local list_copy = _.list_copy
@@ -112,7 +112,7 @@ function M.check_outdated_primary_package(receipt, install_dir)
local primary_package = receipt.primary_source.package
return M.get_installed_primary_package_version(receipt, install_dir)
:and_then(function(installed_version)
- return api.npm.versions.latest({ package = primary_package }):map(function(response)
+ return providers.npm.get_latest_version(primary_package):map(function(response)
return {
installed = installed_version,
latest = response.version,
diff --git a/lua/mason-core/managers/pip3/init.lua b/lua/mason-core/managers/pip3/init.lua
index 4581bc0b..67f70a89 100644
--- a/lua/mason-core/managers/pip3/init.lua
+++ b/lua/mason-core/managers/pip3/init.lua
@@ -7,6 +7,7 @@ local Optional = require "mason-core.optional"
local installer = require "mason-core.installer"
local Result = require "mason-core.result"
local spawn = require "mason-core.spawn"
+local providers = require "mason-core.providers"
local VENV_DIR = "venv"
@@ -103,36 +104,27 @@ function M.check_outdated_primary_package(receipt, install_dir)
return Result.failure "Receipt does not have a primary source of type pip3"
end
local normalized_package = M.normalize_package(receipt.primary_source.package)
- return spawn
- .python({
- "-m",
- "pip",
- "list",
- "--outdated",
- "--format=json",
- cwd = install_dir,
- with_paths = { M.venv_path(install_dir) },
- })
- :map_catching(function(result)
- ---@alias PipOutdatedPackage {name: string, version: string, latest_version: string}
- ---@type PipOutdatedPackage[]
- local packages = vim.json.decode(result.stdout)
-
- local outdated_primary_package = _.find_first(function(outdated_package)
- return outdated_package.name == normalized_package
- and outdated_package.version ~= outdated_package.latest_version
- end, packages)
-
- return Optional.of_nilable(outdated_primary_package)
- :map(function(pkg)
- return {
+ return M.get_installed_primary_package_version(receipt, install_dir):and_then(function(installed_version)
+ return providers.pypi
+ .get_latest_version(normalized_package)
+ :map(function(latest)
+ return {
+ current = installed_version,
+ latest = latest.version,
+ }
+ end)
+ :and_then(function(versions)
+ if versions.current ~= versions.latest then
+ return Result.success {
name = normalized_package,
- current_version = assert(pkg.version, "missing current pip3 package version"),
- latest_version = assert(pkg.latest_version, "missing latest pip3 package version"),
+ current_version = versions.current,
+ latest_version = versions.latest,
}
- end)
- :or_else_throw "Primary package is not outdated."
- end)
+ else
+ return Result.failure "Primary package is not outdated."
+ end
+ end)
+ end)
end
---@async