aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-registry/api.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/mason-registry/api.lua')
-rw-r--r--lua/mason-registry/api.lua37
1 files changed, 35 insertions, 2 deletions
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",
},
}