diff options
| author | William Boman <william@redwill.se> | 2023-10-11 22:47:18 +0200 |
|---|---|---|
| committer | William Boman <william@redwill.se> | 2025-02-19 09:23:19 +0100 |
| commit | 308a4cf5fd9ed79dd57243f0290e317951cd2361 (patch) | |
| tree | 7908acb2b0316029b6b32998a4e397d15d100168 /lua/mason-core/providers/init.lua | |
| parent | fix(command): don't attempt installing packages that are already installing (diff) | |
| download | mason-308a4cf5fd9ed79dd57243f0290e317951cd2361.tar mason-308a4cf5fd9ed79dd57243f0290e317951cd2361.tar.gz mason-308a4cf5fd9ed79dd57243f0290e317951cd2361.tar.bz2 mason-308a4cf5fd9ed79dd57243f0290e317951cd2361.tar.lz mason-308a4cf5fd9ed79dd57243f0290e317951cd2361.tar.xz mason-308a4cf5fd9ed79dd57243f0290e317951cd2361.tar.zst mason-308a4cf5fd9ed79dd57243f0290e317951cd2361.zip | |
chore: hoist single file modules
Diffstat (limited to 'lua/mason-core/providers/init.lua')
| -rw-r--r-- | lua/mason-core/providers/init.lua | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/lua/mason-core/providers/init.lua b/lua/mason-core/providers/init.lua deleted file mode 100644 index 5e2a8ea0..00000000 --- a/lua/mason-core/providers/init.lua +++ /dev/null @@ -1,107 +0,0 @@ -local Result = require "mason-core.result" -local log = require "mason-core.log" -local settings = require "mason.settings" - ----@alias GitHubRelease { tag_name: string, prerelease: boolean, draft: boolean, assets: table[] } ----@alias GitHubTag { name: string } - ----@class GitHubProvider ----@field get_latest_release? async fun(repo: string): Result # Result<GitHubRelease> ----@field get_all_release_versions? async fun(repo: string): Result # Result<string[]> ----@field get_latest_tag? async fun(repo: string): Result # Result<GitHubTag> ----@field get_all_tags? async fun(repo: string): Result # Result<string[]> - ----@alias NpmPackage { name: string, version: string } - ----@class NpmProvider ----@field get_latest_version? async fun(pkg: string): Result # Result<NpmPackage> ----@field get_all_versions? async fun(pkg: string): Result # Result<string[]> - ----@alias PyPiPackage { name: string, version: string } - ----@class PyPiProvider ----@field get_latest_version? async fun(pkg: string): Result # Result<PyPiPackage> ----@field get_all_versions? async fun(pkg: string): Result # Result<string[]> # Sorting should not be relied upon due to "proprietary" sorting algo in pip that is difficult to replicate in mason-registry-api. ----@field get_supported_python_versions? async fun(pkg: string, version: string): Result # Result<string> # Returns a version specifier as provided by the PyPI API (see PEP440). - ----@alias RubyGem { name: string, version: string } - ----@class RubyGemsProvider ----@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 OpenVSXProvider ----@field get_latest_version? async fun(namespace: string, extension: string): Result # Result<Crate> ----@field get_all_versions? async fun(namespace: string, extension: string): Result # Result<string[]> - ----@class Provider ----@field github? GitHubProvider ----@field npm? NpmProvider ----@field pypi? PyPiProvider ----@field rubygems? RubyGemsProvider ----@field packagist? PackagistProvider ----@field crates? CratesProvider ----@field golang? GolangProvider ----@field openvsx? OpenVSXProvider - -local function service_mt(service) - return setmetatable({}, { - __index = function(_, method) - return function(...) - if #settings.current.providers < 1 then - log.error "No providers configured." - return Result.failure "1 or more providers are required." - end - for _, provider_module in ipairs(settings.current.providers) do - local ok, provider = pcall(require, provider_module) - if ok and provider then - local impl = provider[service] and provider[service][method] - if impl then - ---@type boolean, Result - local ok, result = pcall(impl, ...) - if ok and result:is_success() then - return result - else - if getmetatable(result) == Result then - log.fmt_error("Provider %s %s failed: %s", service, method, result:err_or_nil()) - else - log.fmt_error("Provider %s %s errored: %s", service, method, result) - end - end - end - else - log.fmt_error("Unable to find provider %s is not registered. %s", provider_module, provider) - end - end - local err = ("No provider implementation succeeded for %s.%s"):format(service, method) - log.error(err) - return Result.failure(err) - end - end, - }) -end - ----@type Provider -local providers = setmetatable({}, { - __index = function(tbl, service) - tbl[service] = service_mt(service) - return tbl[service] - end, -}) - -return providers |
