-
-
Notifications
You must be signed in to change notification settings - Fork 92
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: make manager checker a utility
- Loading branch information
Showing
10 changed files
with
97 additions
and
114 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
# frozen_string_literal: true | ||
# | ||
require "package_json" | ||
|
||
module Shakapacker | ||
module Utils | ||
class Manager | ||
class Error < StandardError; end | ||
|
||
MANAGER_LOCKS = { | ||
"bun" => "bun.lockb", | ||
"npm" => "package-lock.json", | ||
"pnpm" => "pnpm-lock.yaml", | ||
"yarn" => "yarn.lock" | ||
} | ||
|
||
# Emits a warning if it's not obvious what package manager to use | ||
def self.warn_unless_package_manager_is_obvious! | ||
return unless PackageJson.read.fetch("packageManager", nil).nil? | ||
|
||
guessed_binary = guess_binary | ||
|
||
return if guessed_binary == "npm" | ||
|
||
Shakapacker.puts_deprecation_message(<<~MSG) | ||
You have not got "packageManager" set in your package.json meaning that Shakapacker will use npm | ||
but you've got a #{MANAGER_LOCKS[guessed_binary]} file meaning you probably want | ||
to be using #{guessed_binary} instead. | ||
To make this happen, set "packageManager" in your package.json to #{guessed_binary}@#{guess_version} | ||
MSG | ||
end | ||
|
||
# Guesses the binary of the package manager to use based on what lockfiles exist | ||
# | ||
# @return [String] | ||
def self.guess_binary | ||
MANAGER_LOCKS.find { |_, lock| File.exist?(lock) }&.first || "npm" | ||
end | ||
|
||
# Guesses the version of the package manager to use by calling `<manager> --version` | ||
# | ||
# @return [String] | ||
def self.guess_version | ||
require "open3" | ||
|
||
command = "#{guess_binary} --version" | ||
stdout, stderr, status = Open3.capture3(command) | ||
|
||
unless status.success? | ||
raise Error, "#{command} failed with exit code #{status.exitstatus}: #{stderr}" | ||
end | ||
|
||
stdout.chomp | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters