/** * RubyGems Registry Type Definitions * Compliant with Compact Index API and RubyGems protocol */ /** * Gem version entry in compact index */ export interface IRubyGemsVersion { /** Version number */ version: string; /** Platform (e.g., ruby, x86_64-linux) */ platform?: string; /** Dependencies */ dependencies?: IRubyGemsDependency[]; /** Requirements */ requirements?: IRubyGemsRequirement[]; /** Whether this version is yanked */ yanked?: boolean; /** SHA256 checksum of .gem file */ checksum?: string; } /** * Gem dependency specification */ export interface IRubyGemsDependency { /** Gem name */ name: string; /** Version requirement (e.g., ">= 1.0", "~> 2.0") */ requirement: string; } /** * Gem requirements (ruby version, rubygems version, etc.) */ export interface IRubyGemsRequirement { /** Requirement type (ruby, rubygems) */ type: 'ruby' | 'rubygems'; /** Version requirement */ requirement: string; } /** * Complete gem metadata */ export interface IRubyGemsMetadata { /** Gem name */ name: string; /** All versions */ versions: Record; /** Last modified timestamp */ 'last-modified'?: string; } /** * Version-specific metadata */ export interface IRubyGemsVersionMetadata { /** Version number */ version: string; /** Platform */ platform?: string; /** Authors */ authors?: string[]; /** Description */ description?: string; /** Summary */ summary?: string; /** Homepage */ homepage?: string; /** License */ license?: string; /** Dependencies */ dependencies?: IRubyGemsDependency[]; /** Requirements */ requirements?: IRubyGemsRequirement[]; /** SHA256 checksum */ checksum: string; /** File size */ size: number; /** Upload timestamp */ 'upload-time': string; /** Uploader */ 'uploaded-by': string; /** Yanked status */ yanked?: boolean; /** Yank reason */ 'yank-reason'?: string; } /** * Compact index versions file entry * Format: GEMNAME [-]VERSION_PLATFORM[,VERSION_PLATFORM,...] MD5 */ export interface ICompactIndexVersionsEntry { /** Gem name */ name: string; /** Versions (with optional platform and yank flag) */ versions: Array<{ version: string; platform?: string; yanked: boolean; }>; /** MD5 checksum of info file */ infoChecksum: string; } /** * Compact index info file entry * Format: VERSION[-PLATFORM] [DEP[,DEP,...]]|REQ[,REQ,...] */ export interface ICompactIndexInfoEntry { /** Version number */ version: string; /** Platform (optional) */ platform?: string; /** Dependencies */ dependencies: IRubyGemsDependency[]; /** Requirements */ requirements: IRubyGemsRequirement[]; /** SHA256 checksum */ checksum: string; } /** * Gem upload request */ export interface IRubyGemsUploadRequest { /** Gem file data */ gemData: Buffer; /** Gem filename */ filename: string; } /** * Gem upload response */ export interface IRubyGemsUploadResponse { /** Success message */ message?: string; /** Gem name */ name?: string; /** Version */ version?: string; } /** * Yank request */ export interface IRubyGemsYankRequest { /** Gem name */ gem_name: string; /** Version to yank */ version: string; /** Platform (optional) */ platform?: string; } /** * Yank response */ export interface IRubyGemsYankResponse { /** Success indicator */ success: boolean; /** Message */ message?: string; } /** * Version info response (JSON) */ export interface IRubyGemsVersionInfo { /** Gem name */ name: string; /** Versions list */ versions: Array<{ /** Version number */ number: string; /** Platform */ platform?: string; /** Build date */ built_at?: string; /** Download count */ downloads_count?: number; }>; } /** * Dependencies query response */ export interface IRubyGemsDependenciesResponse { /** Dependencies for requested gems */ dependencies: Array<{ /** Gem name */ name: string; /** Version */ number: string; /** Platform */ platform?: string; /** Dependencies */ dependencies: Array<{ name: string; requirements: string; }>; }>; } /** * Error response structure */ export interface IRubyGemsError { /** Error message */ error: string; /** HTTP status code */ status?: number; } /** * Gem specification (extracted from .gem file) */ export interface IRubyGemsSpec { /** Gem name */ name: string; /** Version */ version: string; /** Platform */ platform?: string; /** Authors */ authors?: string[]; /** Email */ email?: string; /** Homepage */ homepage?: string; /** Summary */ summary?: string; /** Description */ description?: string; /** License */ license?: string; /** Dependencies */ dependencies?: IRubyGemsDependency[]; /** Required Ruby version */ required_ruby_version?: string; /** Required RubyGems version */ required_rubygems_version?: string; /** Files */ files?: string[]; /** Requirements */ requirements?: string[]; }