class ReactOnRails::VersionChecker::NodePackageVersion

def version_from_package_lock(package_name)

rubocop:disable Metrics/CyclomaticComplexity
Supports both v1 (dependencies) and v2/v3 (packages) formats
Parse version from package-lock.json
def version_from_package_lock(package_name)
  return nil unless package_lock && File.exist?(package_lock)
  begin
    parsed = JSON.parse(File.read(package_lock))
    # Try v2/v3 format first (packages)
    if parsed["packages"]
      # Look for node_modules/package-name entry
      node_modules_key = "node_modules/#{package_name}"
      package_data = parsed["packages"][node_modules_key]
      return package_data["version"] if package_data&.key?("version")
    end
    # Fall back to v1 format (dependencies)
    if parsed["dependencies"]
      dependency_data = parsed["dependencies"][package_name]
      # In v1, the dependency can be a hash with a "version" key
      return dependency_data["version"] if dependency_data.is_a?(Hash) && dependency_data.key?("version")
    end
  rescue JSON::ParserError
    # If we can't parse the lockfile, fall back to package.json version
    nil
  end
  nil
end