From d737e2ef6f98dbb0ebefa88839975d69bee8de06 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Sun, 13 Aug 2023 10:47:23 +1200 Subject: [PATCH] feat: check `PACKAGE_JSON_FALLBACK_MANAGER` for default fallback manager --- README.md | 7 +++++-- lib/package_json.rb | 8 ++++++-- sig/package_json.rbs | 2 ++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4263621..214eb0c 100644 --- a/README.md +++ b/README.md @@ -90,8 +90,11 @@ does not exist or does not have the `packageManager` property: PackageJson.new(fallback_manager: :yarn_classic) ``` -The default fallback is `:npm`; supported package managers are `:npm`, -`:yarn_classic`, and `:pnpm`. +If a fallback manager is not defined, then the value of the env variable +`PACKAGE_JSON_FALLBACK_MANAGER` will be used if set, or otherwise falling back +to `npm`. + +Supported package managers are `:npm`, `:yarn_classic`, and `:pnpm`. If the `package.json` does not exist, then the `packageManager` property will be included based on this value, but it will _not_ be updated if the file already diff --git a/lib/package_json.rb b/lib/package_json.rb index 9699167..b41a6c8 100644 --- a/lib/package_json.rb +++ b/lib/package_json.rb @@ -14,7 +14,11 @@ class NotImplementedError < Error; end attr_reader :manager, :path - def self.read(path_to_directory = Dir.pwd, fallback_manager: :npm) + def self.fetch_default_fallback_manager + ENV.fetch("PACKAGE_JSON_FALLBACK_MANAGER", "npm").to_sym + end + + def self.read(path_to_directory = Dir.pwd, fallback_manager: PackageJson.fetch_default_fallback_manager) unless File.exist?("#{path_to_directory}/package.json") raise Error, "#{path_to_directory} does not contain a package.json" end @@ -22,7 +26,7 @@ def self.read(path_to_directory = Dir.pwd, fallback_manager: :npm) new(path_to_directory, fallback_manager: fallback_manager) end - def initialize(path_to_directory = Dir.pwd, fallback_manager: :npm) + def initialize(path_to_directory = Dir.pwd, fallback_manager: PackageJson.fetch_default_fallback_manager) @path = path_to_directory ensure_package_json_exists(fallback_manager) diff --git a/sig/package_json.rbs b/sig/package_json.rbs index 610479e..a6307db 100644 --- a/sig/package_json.rbs +++ b/sig/package_json.rbs @@ -10,6 +10,8 @@ class PackageJson attr_reader manager: Managers::Base attr_reader path: String + def self.fetch_default_fallback_manager: () -> Symbol + def self.read: (?String path_to_directory, ?package_manager: (:npm | :yarn_classic | :pnpm)) -> PackageJson def initialize: (?String path_to_directory, ?package_manager: (:npm | :yarn_classic | :pnpm)) -> PackageJson