Skip to content

Commit bf167dd

Browse files
committed
Address RSC generator review follow-ups
1 parent 3c99c28 commit bf167dd

2 files changed

Lines changed: 33 additions & 39 deletions

File tree

react_on_rails/lib/generators/react_on_rails/js_dependency_manager.rb

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -413,14 +413,13 @@ def add_rsc_dependencies
413413
GeneratorMessages.add_info(rsc_dependency_pin_info) if used_version_pins
414414
return if add_packages(rsc_packages)
415415

416-
manual_install_packages = rsc_packages
417416
GeneratorMessages.add_warning(rsc_dependency_pin_failed_warning) if used_version_pins
418417

419418
GeneratorMessages.add_warning(<<~MSG.strip)
420419
⚠️ Failed to add React Server Components dependencies.
421420
422421
You can install them manually by running:
423-
#{manual_add_packages_command(manual_install_packages)}
422+
#{manual_add_packages_command(rsc_packages)}
424423
MSG
425424
rescue StandardError => e
426425
manual_install_packages = rsc_packages_with_pin
@@ -613,18 +612,15 @@ def fallback_package_manager
613612
end
614613

615614
def build_install_args(package_manager, dev, packages)
616-
base_commands = {
617-
"npm" => %w[npm install --save-exact],
618-
"yarn" => %w[yarn add --exact],
619-
"pnpm" => %w[pnpm add --save-exact],
620-
"bun" => %w[bun add --exact]
621-
}
622-
623-
base_args = base_commands.fetch(package_manager).dup
615+
base_args = package_manager_commands(package_manager).fetch(:install).dup
624616
base_args << dev_flag_for(package_manager) if dev
625617
base_args + packages
626618
end
627619

620+
def build_remove_args(package_manager, packages)
621+
package_manager_commands(package_manager).fetch(:remove) + packages
622+
end
623+
628624
def manual_add_packages_command(packages, dev: false)
629625
build_install_args(fallback_package_manager, dev, packages).join(" ")
630626
end
@@ -634,14 +630,28 @@ def manual_install_dependencies_command
634630
end
635631

636632
def manual_remove_packages_command(packages)
637-
base_commands = {
638-
"npm" => %w[npm uninstall],
639-
"yarn" => %w[yarn remove],
640-
"pnpm" => %w[pnpm remove],
641-
"bun" => %w[bun remove]
642-
}
643-
644-
(base_commands.fetch(fallback_package_manager).dup + packages).join(" ")
633+
build_remove_args(fallback_package_manager, packages).join(" ")
634+
end
635+
636+
def package_manager_commands(package_manager)
637+
{
638+
"npm" => {
639+
install: %w[npm install --save-exact],
640+
remove: %w[npm uninstall]
641+
},
642+
"yarn" => {
643+
install: %w[yarn add --exact],
644+
remove: %w[yarn remove]
645+
},
646+
"pnpm" => {
647+
install: %w[pnpm add --save-exact],
648+
remove: %w[pnpm remove]
649+
},
650+
"bun" => {
651+
install: %w[bun add --exact],
652+
remove: %w[bun remove]
653+
}
654+
}.fetch(package_manager)
645655
end
646656

647657
def dev_flag_for(package_manager)

react_on_rails/spec/react_on_rails/generators/js_dependency_manager_spec.rb

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -680,33 +680,17 @@ def errors
680680

681681
expect(instance).to have_received(:add_packages).with([rsc_package])
682682
expect(instance).not_to have_received(:add_packages).with(["react-on-rails-rsc"])
683-
expect(warnings.join("\n")).to include("left the version pin in package.json")
684-
end
685-
686-
it "skips the unversioned fallback for rspack and keeps the pin when the pinned install fails" do
687-
instance.using_rspack = true
688-
allow(instance)
689-
.to receive(:rsc_packages_with_version)
690-
.and_return([["react-on-rails-rsc@19.0.5-rc.6"], true])
691-
692-
allow(instance).to receive(:add_packages).with(["react-on-rails-rsc@19.0.5-rc.6"]).and_return(false)
693-
allow(instance).to receive(:add_packages).with(["react-on-rails-rsc"]).and_return(true)
694-
695-
instance.send(:add_rsc_dependencies)
696-
697-
# rspack must NOT retry the unversioned `latest` (it lacks RspackPlugin)
698-
expect(instance).not_to have_received(:add_packages).with(["react-on-rails-rsc"])
699683

700684
warning_text = warnings.join("\n")
701685
expect(warning_text).to include("Could not install the pinned react-on-rails-rsc@19.0.5-rc.6")
686+
expect(warning_text).to include("left the version pin in package.json")
702687
expect(warning_text).to include("react-on-rails-rsc/RspackPlugin")
703-
# the manual instruction points at the pinned version, not the unversioned package
704-
expect(warning_text).to include("npm install --save-exact react-on-rails-rsc@19.0.5-rc.6")
705-
expect(warning_text.scan("npm install --save-exact react-on-rails-rsc@19.0.5-rc.6").size).to eq(1)
688+
manual_command = "npm install --save-exact react-on-rails-rsc@19.0.5-rc.6"
689+
expect(warning_text).to include(manual_command)
690+
expect(warning_text.scan(manual_command).size).to eq(1)
706691
end
707692

708-
it "keeps the rspack pin in the manual install instruction when the pinned install raises" do
709-
instance.using_rspack = true
693+
it "keeps the pinned manual install instruction when the pinned install raises" do
710694
allow(instance)
711695
.to receive(:rsc_packages_with_version)
712696
.and_return([["react-on-rails-rsc@19.0.5-rc.6"], true])

0 commit comments

Comments
 (0)