module ViteRuby::CompatibilityCheck

def compatible_plugin?(npm_req, ruby_req)

requirement.
Internal: Returns true unless the check is performed and does not meet the
def compatible_plugin?(npm_req, ruby_req)
  npm_req, ruby_req = [npm_req, ruby_req]
    .map { |req| Gem::Requirement.new(req.sub("^", "~>")) }
  current_version = npm_req.requirements.first.second
  ruby_req.satisfied_by?(current_version)
rescue
  true
end

def raise_unless_satisfied(npm_req, ruby_req)

Internal: Notifies the user of a possible incompatible plugin.
def raise_unless_satisfied(npm_req, ruby_req)
  unless compatible_plugin?(npm_req, ruby_req)
    raise ArgumentError, <<~ERROR
      vite-plugin-ruby@#{npm_req} might not be compatible with vite_ruby-#{ViteRuby::VERSION}
      You may disable this check if needed: https://vite-ruby.netlify.app/config/#skipcompatibilitycheck
      You may upgrade both by running:
          bundle exec vite upgrade
    ERROR
  end
end

def verify_plugin_version(root)

Public: Attempt to verify that the vite-plugin-ruby version is compatible.
def verify_plugin_version(root)
  package = JSON.parse(root.join("package.json").read) rescue {}
  requirement = package.dig("devDependencies", "vite-plugin-ruby") ||
    package.dig("dependencies", "vite-plugin-ruby")
  raise_unless_satisfied(requirement, ViteRuby::DEFAULT_PLUGIN_VERSION)
end