Skip to content

Commit

Permalink
fix: support pnpm v9 lockfiles
Browse files Browse the repository at this point in the history
  • Loading branch information
G-Rath committed May 10, 2024
1 parent c1c6db8 commit 48f7bcf
Show file tree
Hide file tree
Showing 2 changed files with 176 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/shakapacker/version_checker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,13 @@ def from_pnpm_lock
content = YAML.load_file(@pnpm_lock)

content.fetch("packages", {}).each do |key, value|
# git-based constraints will include a "version" key with their pseudo semantic version
return value["version"] if key.start_with?("shakapacker") && value.key?("version")
return value["version"] if value["name"] == "shakapacker"

# v9+ uses the same key format just without the leading slash, so we just add one in
key = "/#{key}" unless key.start_with?("/")

parts = key.split("/")

return parts[2] if parts[1] == "shakapacker"
Expand Down
171 changes: 171 additions & 0 deletions spec/shakapacker/version_checker_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1295,4 +1295,175 @@ def node_package_version(fixture_version:)
end
end
end

context "with pnpm-lock.yaml v9" do
def node_package_version(fixture_version:)
Shakapacker::VersionChecker::NodePackageVersion.new(
File.expand_path("../fixtures/#{fixture_version}_package.json", __dir__),
"file/does/not/exist",
"file/does/not/exist",
File.expand_path("../fixtures/#{fixture_version}_pnpm-lock.v9.yaml", __dir__)
)
end

context "when using an exact semantic version" do
let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }

it "#raw returns the raw version" do
expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
end

it "#major_minor_patch returns an array" do
expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
end

it "#skip_processing? returns false" do
expect(node_package_version_from_semver_exact.skip_processing?).to be false
end

it "#semver_wildcard? returns false" do
expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
end
end

context "when using a beta version" do
let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }

it "#raw returns the raw version" do
expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
end

it "#major_minor_patch returns an array" do
expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
end

it "#skip_processing? returns false" do
expect(node_package_version_from_beta.skip_processing?).to be false
end

it "#semver_wildcard? returns false" do
expect(node_package_version_from_beta.semver_wildcard?).to be false
end
end

context "when using a caret constraint" do
let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }

it "#raw returns the raw version" do
expect(node_package_version_from_semver_caret.raw).to eq "6.6.0"
end

it "#major_minor_patch returns an array" do
expect(node_package_version_from_semver_caret.major_minor_patch).to eq ["6", "6", "0"]
end

it "#skip_processing? returns false" do
expect(node_package_version_from_semver_caret.skip_processing?).to be false
end

it "#semver_wildcard? returns false" do
expect(node_package_version_from_semver_caret.semver_wildcard?).to be false
end
end

context "when using a tilde constraint" do
let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }

it "#raw returns the raw version" do
expect(node_package_version_from_semver_tilde.raw).to eq "6.0.2"
end

it "#major_minor_patch returns an array" do
expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "2"]
end

it "#skip_processing? returns false" do
expect(node_package_version_from_semver_tilde.skip_processing?).to be false
end

it "#semver_wildcard? returns false" do
expect(node_package_version_from_semver_tilde.semver_wildcard?).to be false
end
end

context "when using a relative path" do
let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }

it "#raw returns the raw version" do
expect(node_package_version_from_relative_path.raw).to eq "../.."
end

it "#major_minor_patch returns nil" do
expect(node_package_version_from_relative_path.major_minor_patch).to be nil
end

it "#skip_processing? returns true" do
expect(node_package_version_from_relative_path.skip_processing?).to be true
end

it "#semver_wildcard? returns false" do
expect(node_package_version_from_relative_path.semver_wildcard?).to be false
end
end

context "when using a git url" do
let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }

it "#raw returns the raw version" do
expect(node_package_version_from_git_url.raw).to eq "8.0.0-rc.2"
end

it "#major_minor_patch returns an array" do
expect(node_package_version_from_git_url.major_minor_patch).to eq ["8", "0", "0"]
end

it "#skip_processing? returns false" do
expect(node_package_version_from_git_url.skip_processing?).to be false
end

it "#semver_wildcard? returns false" do
expect(node_package_version_from_git_url.semver_wildcard?).to be false
end
end

context "when using a github url" do
let(:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }

it "#raw returns the raw version" do
expect(node_package_version_from_github_url.raw).to eq "8.0.0-rc.2"
end

it "#major_minor_patch returns an array" do
expect(node_package_version_from_github_url.major_minor_patch).to eq ["8", "0", "0"]
end

it "#skip_processing? returns false" do
expect(node_package_version_from_github_url.skip_processing?).to be false
end

it "#semver_wildcard? returns false" do
expect(node_package_version_from_github_url.semver_wildcard?).to be false
end
end

context "when shakapacker is not a dependency" do
let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }

it "#raw returns an empty string" do
expect(node_package_version_from_without.raw).to eq ""
end

it "#major_minor_patch returns nil" do
expect(node_package_version_from_without.major_minor_patch).to be nil
end

it "#skip_processing? returns true" do
expect(node_package_version_from_without.skip_processing?).to be true
end

it "#semver_wildcard? returns false" do
expect(node_package_version_from_without.semver_wildcard?).to be false
end
end
end
end

0 comments on commit 48f7bcf

Please sign in to comment.