class ReactOnRails::VersionChecker::NodePackageVersion
def version_from_package_lock(package_name)
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