// Package readers provides interfaces and implementations for reading database schemas // from various input formats and data sources. // // # Overview // // The readers package defines a common Reader interface that all format-specific readers // implement. This allows RelSpec to read database schemas from multiple sources including: // - Live databases (PostgreSQL, SQLite) // - Schema definition files (DBML, DCTX, DrawDB, GraphQL) // - ORM model files (GORM, Bun, Drizzle, Prisma, TypeORM) // - Data interchange formats (JSON, YAML) // // # Architecture // // Each reader implementation is located in its own subpackage (e.g., pkg/readers/dbml, // pkg/readers/pgsql) and implements the Reader interface, supporting three levels of // granularity: // - ReadDatabase() - Read complete database with all schemas // - ReadSchema() - Read single schema with all tables // - ReadTable() - Read single table with all columns and metadata // // # Usage // // Readers are instantiated with ReaderOptions containing source-specific configuration: // // // Read from file // reader := dbml.NewReader(&readers.ReaderOptions{ // FilePath: "schema.dbml", // }) // db, err := reader.ReadDatabase() // // // Read from database // reader := pgsql.NewReader(&readers.ReaderOptions{ // ConnectionString: "postgres://user:pass@localhost/mydb", // }) // db, err := reader.ReadDatabase() // // # Supported Formats // // - dbml: Database Markup Language files // - dctx: DCTX schema files // - drawdb: DrawDB JSON format // - graphql: GraphQL schema definition language // - json: JSON database schema // - yaml: YAML database schema // - gorm: Go GORM model structs // - bun: Go Bun model structs // - drizzle: TypeScript Drizzle ORM schemas // - prisma: Prisma schema language // - typeorm: TypeScript TypeORM entities // - pgsql: PostgreSQL live database introspection // - sqlite: SQLite database files package readers