diff options
| author | William Boman <william@redwill.se> | 2022-10-09 23:14:15 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-09 23:14:15 +0200 |
| commit | f336a8fac9090b4f8f5b3b430b5870efbd4b9113 (patch) | |
| tree | 5f2199e61ac2b0f3814df7dabe7c7eb7cf07cc80 /lua | |
| parent | feat(registry): add iferr tool for Go (#528) (diff) | |
| download | mason-f336a8fac9090b4f8f5b3b430b5870efbd4b9113.tar mason-f336a8fac9090b4f8f5b3b430b5870efbd4b9113.tar.gz mason-f336a8fac9090b4f8f5b3b430b5870efbd4b9113.tar.bz2 mason-f336a8fac9090b4f8f5b3b430b5870efbd4b9113.tar.lz mason-f336a8fac9090b4f8f5b3b430b5870efbd4b9113.tar.xz mason-f336a8fac9090b4f8f5b3b430b5870efbd4b9113.tar.zst mason-f336a8fac9090b4f8f5b3b430b5870efbd4b9113.zip | |
feat(npm): speed up checking for new versions (#530)
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/mason-core/managers/npm/init.lua | 40 | ||||
| -rw-r--r-- | lua/mason-core/package/version-check.lua | 9 | ||||
| -rw-r--r-- | lua/mason-core/result.lua | 9 |
3 files changed, 37 insertions, 21 deletions
diff --git a/lua/mason-core/managers/npm/init.lua b/lua/mason-core/managers/npm/init.lua index 84d9258a..0fe9fafb 100644 --- a/lua/mason-core/managers/npm/init.lua +++ b/lua/mason-core/managers/npm/init.lua @@ -1,10 +1,10 @@ local spawn = require "mason-core.spawn" -local Optional = require "mason-core.optional" local installer = require "mason-core.installer" 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 list_copy = _.list_copy @@ -110,26 +110,26 @@ function M.check_outdated_primary_package(receipt, install_dir) return Result.failure "Receipt does not have a primary source of type npm" end local primary_package = receipt.primary_source.package - local npm_outdated = spawn.npm { "outdated", "--json", primary_package, cwd = install_dir } - if npm_outdated:is_success() then - return Result.failure "Primary package is not outdated." - end - return npm_outdated:recover_catching(function(result) - assert(result.exit_code == 1, "Expected npm outdated to return exit code 1.") - local data = vim.json.decode(result.stdout) - - return Optional.of_nilable(data[primary_package]) - :map(function(outdated_package) - if outdated_package.current ~= outdated_package.latest then - return { - name = primary_package, - current_version = assert(outdated_package.current, "missing current npm package version"), - latest_version = assert(outdated_package.latest, "missing latest npm package version"), - } - end + return M.get_installed_primary_package_version(receipt, install_dir) + :and_then(function(installed_version) + return api.get(("/api/npm/%s/latest-version"):format(primary_package)):map(function(response) + return { + installed = installed_version, + latest = response.version, + } end) - :or_else_throw() - end) + end) + :and_then(function(versions) + if versions.installed ~= versions.latest then + return Result.success { + name = primary_package, + current_version = versions.installed, + latest_version = versions.latest, + } + else + return Result.failure "Primary package is not outdated." + end + end) end return M diff --git a/lua/mason-core/package/version-check.lua b/lua/mason-core/package/version-check.lua index 3359446a..203b5057 100644 --- a/lua/mason-core/package/version-check.lua +++ b/lua/mason-core/package/version-check.lua @@ -8,6 +8,7 @@ local go = require "mason-core.managers.go" local luarocks = require "mason-core.managers.luarocks" local npm = require "mason-core.managers.npm" local pip3 = require "mason-core.managers.pip3" +local log = require "mason-core.log" ---@param field_name string local function version_in_receipt(field_name) @@ -52,7 +53,7 @@ local get_new_version_by_type = { ["github_tag"] = github.check_outdated_primary_package_tag, } ----@param provider_mapping table<string, async fun(receipt: InstallReceipt, install_dir: string)>: Result +---@param provider_mapping table<string, async fun(receipt: InstallReceipt, install_dir: string): Result> local function version_check(provider_mapping) ---@param receipt InstallReceipt ---@param install_dir string @@ -64,6 +65,12 @@ local function version_check(provider_mapping) ) end return check(receipt, install_dir) + :on_success(function(version) + log.debug("Version check", version) + end) + :on_failure(function(failure) + log.debug("Version check failed", tostring(failure)) + end) end end diff --git a/lua/mason-core/result.lua b/lua/mason-core/result.lua index 95c69afa..5c7af3be 100644 --- a/lua/mason-core/result.lua +++ b/lua/mason-core/result.lua @@ -147,6 +147,15 @@ function Result:ok() end end +---@param fn fun(value: any): Result +function Result:and_then(fn) + if self:is_success() then + return fn(self.value) + else + return self + end +end + ---@param fn fun(): any ---@return Result function Result.run_catching(fn) |
