aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-02-19 22:54:29 +0100
committerGitHub <noreply@github.com>2023-02-19 22:54:29 +0100
commit3e5c8e1777e3ec4062306fcb1bb131e1bca2adfe (patch)
treea37c7fd00b68f4207dfd20046b6bff29f5885b5a /lua
parentchore: autogenerate (#1007) (diff)
downloadmason-3e5c8e1777e3ec4062306fcb1bb131e1bca2adfe.tar
mason-3e5c8e1777e3ec4062306fcb1bb131e1bca2adfe.tar.gz
mason-3e5c8e1777e3ec4062306fcb1bb131e1bca2adfe.tar.bz2
mason-3e5c8e1777e3ec4062306fcb1bb131e1bca2adfe.tar.lz
mason-3e5c8e1777e3ec4062306fcb1bb131e1bca2adfe.tar.xz
mason-3e5c8e1777e3ec4062306fcb1bb131e1bca2adfe.tar.zst
mason-3e5c8e1777e3ec4062306fcb1bb131e1bca2adfe.zip
feat(providers): add more endpoints (#1013)
Diffstat (limited to 'lua')
-rw-r--r--lua/mason-core/providers/init.lua31
-rw-r--r--lua/mason-registry/api.lua37
-rw-r--r--lua/mason-registry/bash-debug-adapter/init.lua1
-rw-r--r--lua/mason/providers/registry-api/init.lua21
4 files changed, 80 insertions, 10 deletions
diff --git a/lua/mason-core/providers/init.lua b/lua/mason-core/providers/init.lua
index 8aabcde6..dca59d3f 100644
--- a/lua/mason-core/providers/init.lua
+++ b/lua/mason-core/providers/init.lua
@@ -2,8 +2,7 @@ local settings = require "mason.settings"
local log = require "mason-core.log"
local Result = require "mason-core.result"
----@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 GitHubRelease { tag_name: string, prerelease: boolean, draft: boolean, assets: table[] }
---@alias GitHubTag { name: string }
---@class GitHubProvider
@@ -30,11 +29,29 @@ local Result = require "mason-core.result"
---@field get_latest_version? async fun(gem: string): Result # Result<RubyGem>
---@field get_all_versions? async fun(gem: string): Result # Result<string[]>
+---@alias PackagistPackage { name: string, version: string }
+
+---@class PackagistProvider
+---@field get_latest_version? async fun(pkg: string): Result # Result<PackagistPackage>
+---@field get_all_versions? async fun(pkg: string): Result # Result<string[]>
+
+---@alias Crate { name: string, version: string }
+
+---@class CratesProvider
+---@field get_latest_version? async fun(crate: string): Result # Result<Crate>
+---@field get_all_versions? async fun(crate: string): Result # Result<string[]>
+
+---@class GolangProvider
+---@field get_all_versions? async fun(pkg: string): Result # Result<string[]>
+
---@class Provider
----@field github? GitHubProvider
----@field npm? NpmProvider
----@field pypi? PyPiProvider
----@field rubygems? RubyGemsProvider
+---@field github? GitHubProvider
+---@field npm? NpmProvider
+---@field pypi? PyPiProvider
+---@field rubygems? RubyGemsProvider
+---@field packagist? PackagistProvider
+---@field crates? CratesProvider
+---@field golang? GolangProvider
local function service_mt(service)
return setmetatable({}, {
@@ -65,7 +82,7 @@ local function service_mt(service)
log.fmt_error("Unable to find provider %s is not registered. %s", provider_module, provider)
end
end
- local err = ("No provider implementation found for %s.%s"):format(service, method)
+ local err = ("No provider implementation succeeded for %s.%s"):format(service, method)
log.error(err)
return Result.failure(err)
end
diff --git a/lua/mason-registry/api.lua b/lua/mason-registry/api.lua
index 7d98c7ef..853690b9 100644
--- a/lua/mason-registry/api.lua
+++ b/lua/mason-registry/api.lua
@@ -26,10 +26,18 @@ function api.get(path, opts)
}):map_catching(vim.json.decode)
end
----@alias ApiSignature<T> fun(path_params: T, opts?: ApiFetchOpts): Result
+---@alias ApiSignature<T> async fun(path_params: T, opts?: ApiFetchOpts): Result
+
+---@param char string
+local function percent_encode(char)
+ return ("%%%x"):format(string.byte(char, 1, 1))
+end
+
+api.encode_uri_component = _.gsub("[!#%$&'%(%)%*%+,/:;=%?@%[%]]", percent_encode)
---@param path_template string
local function get(path_template)
+ ---@async
---@param path_params table
---@param opts ApiFetchOpts?
return function(path_params, opts)
@@ -83,7 +91,32 @@ api.rubygems = {
---@type ApiSignature<{ gem: string }>
latest = get "/api/rubygems/{gem}/versions/latest",
---@type ApiSignature<{ gem: string }>
- all = get "/api/rubygemspypi/{gem}/versions/all",
+ all = get "/api/rubygems/{gem}/versions/all",
+ },
+}
+
+api.packagist = {
+ versions = {
+ ---@type ApiSignature<{ pkg: string }>
+ latest = get "/api/packagist/{pkg}/versions/latest",
+ ---@type ApiSignature<{ pkg: string }>
+ all = get "/api/packagist/{pkg}/versions/all",
+ },
+}
+
+api.crate = {
+ versions = {
+ ---@type ApiSignature<{ crate: string }>
+ latest = get "/api/crate/{crate}/versions/latest",
+ ---@type ApiSignature<{ crate: string }>
+ all = get "/api/crate/{crate}/versions/all",
+ },
+}
+
+api.golang = {
+ versions = {
+ ---@type ApiSignature<{ pkg: string }>
+ all = get "/api/golang/{pkg}/versions/all",
},
}
diff --git a/lua/mason-registry/bash-debug-adapter/init.lua b/lua/mason-registry/bash-debug-adapter/init.lua
index c77abb81..6d98e2e8 100644
--- a/lua/mason-registry/bash-debug-adapter/init.lua
+++ b/lua/mason-registry/bash-debug-adapter/init.lua
@@ -25,7 +25,6 @@ return Pkg.new {
end)
:get_or_throw()
- ---@type GitHubReleaseAsset
local release_asset = _.find_first(_.prop_satisfies(_.matches "%.vsix$", "name"), release.assets)
github
diff --git a/lua/mason/providers/registry-api/init.lua b/lua/mason/providers/registry-api/init.lua
index 8bab8911..0f98a407 100644
--- a/lua/mason/providers/registry-api/init.lua
+++ b/lua/mason/providers/registry-api/init.lua
@@ -40,4 +40,25 @@ return {
return api.rubygems.versions.all { gem = gem }
end,
},
+ packagist = {
+ get_latest_version = function(pkg)
+ return api.packagist.versions.latest { pkg = pkg }
+ end,
+ get_all_versions = function(pkg)
+ return api.packagist.versions.all { pkg = pkg }
+ end,
+ },
+ crates = {
+ get_latest_version = function(crate)
+ return api.crate.versions.latest { crate = crate }
+ end,
+ get_all_versions = function(crate)
+ return api.crate.versions.all { crate = crate }
+ end,
+ },
+ golang = {
+ get_all_versions = function(pkg)
+ return api.golang.versions.all { pkg = api.encode_uri_component(pkg) }
+ end,
+ },
}