diff --git a/lib/generators/htmx/install_generator.rb b/lib/generators/htmx/install_generator.rb index 3cafd74..39c7009 100644 --- a/lib/generators/htmx/install_generator.rb +++ b/lib/generators/htmx/install_generator.rb @@ -11,7 +11,9 @@ class InstallGenerator < ::Rails::Generators::Base # Setup HTMX def setup - if importmap? + if bun_configured? + setup_bun + elsif importmap? setup_importmap elsif webpacker? setup_webpacker @@ -24,6 +26,10 @@ def setup private + def bun_configured? + Pathname.new(destination_root).join("bun.config.js").exist? + end + def webpacker? !!defined?(Webpacker) end @@ -40,6 +46,17 @@ def manifest(javascript_dir) Pathname.new(destination_root).join(javascript_dir, 'application.js') end + def setup_bun + run 'bun add htmx.org' + + manifest = manifest('app/javascript') + if manifest.exist? + append_file manifest, "\n#{IMPORTMAP_SETUP}" + else + create_file manifest, IMPORTMAP_SETUP + end + end + def setup_importmap run 'bin/importmap pin htmx.org' diff --git a/spec/generators/install_generator_spec.rb b/spec/generators/install_generator_spec.rb index 716d9d8..bea29e9 100644 --- a/spec/generators/install_generator_spec.rb +++ b/spec/generators/install_generator_spec.rb @@ -114,6 +114,20 @@ end end + context 'with bun configured' do + before do + generate_bun_config + end + + it 'updates file with htmx import' do + run_generator + assert_file( + 'app/javascript/application.js', + "\n#{Htmx::Generators::InstallGenerator::IMPORTMAP_SETUP}" + ) + end + end + context 'with no asset pipeline' do before do hide_const('Webpacker') diff --git a/spec/support/files_helper.rb b/spec/support/files_helper.rb index 29c6a5f..f8256dc 100644 --- a/spec/support/files_helper.rb +++ b/spec/support/files_helper.rb @@ -7,5 +7,10 @@ def generate_application_js(location_folder) FileUtils.mkdir_p(pathname) File.write("#{pathname}/application.js", '') end + + def generate_bun_config + FileUtils.mkdir_p(destination_root) + File.write("#{destination_root}/bun.config.js", "// Some JS\n") + end end end