module ViteHanami::Installation

Internal: Extends the base installation script from Vite Ruby to work for a typical Hanami app.

Constants

HANAMI_TEMPLATES

Public Instance Methods

install_sample_files() click to toggle source

Override: Inject the vite client and sample script to the default HTML template.

Calls superclass method
# File lib/vite_hanami/installation.rb, line 30
  def install_sample_files
    super
    inject_line_before root.join('apps/web/templates/application.html.erb'), '</head>', <<-HTML
    <%= vite_client %>
    <%= vite_javascript 'application' %>
    HTML
  end
setup_app_files() click to toggle source

Override: Setup a typical apps/web Hanami app to use Vite.

# File lib/vite_hanami/installation.rb, line 11
  def setup_app_files
    cp HANAMI_TEMPLATES.join('config/hanami-vite.json'), config.config_path
    inject_line_after root.join('config/environment.rb'), 'environment :development do', '    middleware.use(ViteRuby::DevServerProxy, ssl_verify_none: true) if ViteRuby.run_proxy?'
    inject_line_after_last root.join('apps/web/application.rb'), 'include Web::Assets::Helpers', '        include ViteHanami::TagHelpers'
    inject_line_after root.join('apps/web/application.rb'), 'configure :development do', <<-CSP
      # Allow @vite/client to hot reload changes in development
      security.content_security_policy(
        security.content_security_policy
          .sub('script-src', "script-src 'unsafe-eval' 'unsafe-inline'")
          .sub('connect-src', "connect-src ws://\#{ ViteRuby.config.host_with_port }")
      )
    CSP
    append root.join('Rakefile'), <<~RAKE
      require 'vite_hanami'
      ViteRuby.install_tasks
    RAKE
  end